2008-11-11 8 views

Trả lời

47

Tôi đã thấy điều đó xảy ra ngay cả khi không có MVC. Nếu tôi nhớ chính xác, ASP.NET sẽ chỉ định id phiên mới cho đến khi bạn đặt thứ gì đó vào biến Phiên.

+0

nó thua phiên ngay cả khi bạn đặt một cái gì đó vào nó. Khóa máy bên trong web.config là điều duy nhất giải quyết vấn đề đó –

+0

Chỉ khi có một trang web liên quan. Và nếu bạn đọc nhận xét của OP trong một trong các câu trả lời, bạn sẽ thấy rằng việc thêm một mục vào biến phiên làm việc đã khắc phục được sự cố. – Maxam

+0

Nhà cung cấp dịch vụ lưu trữ của tôi không có trang web và việc thêm nội dung vào phiên không khắc phục được. Tôi vẫn mất nó sau vài phút - ngay cả khi tôi có nhiều thứ trong phiên (người dùng đã đăng nhập, giỏ hàng của anh ấy, ...) Tôi đã thử với 2 nhà cung cấp dịch vụ lưu trữ –

2

Tôi sẽ xem xét sử dụng TempData để theo dõi thứ gì đó.

+0

Trên thực tế tất cả những gì phải làm là gán một biến phiên một giá trị và làm cho nó dính .. – dswatik

0

Hãy thử với việc thêm chìa khóa máy vào web.config của bạn:
trực tuyến máy phát điện chính: http://aspnetresources.com/tools/keycreator.aspx Dường như chìa khóa reset máy chủ máy tính cho khách hàng và tạo ra cái mới với id phiên làm việc mới, cứ mỗi vài phút, thấp hơn nhiều so với nó nên. Không biết nếu đó là lỗi hoặc tính năng :)
Ngoài ra, bạn có thể tăng thời gian chờ trạng thái phiên của bạn, đó là tôi nghĩ rằng 20 phút theo mặc định.

5

tôi đang làm việc trên một ứng dụng giỏ hàng NET MVC và tôi đã thêm

Session["myVar"] = "1234"; 

cho phương thức Page_Load tìm thấy trong mã Default.aspx.cs. Tôi cũng đã thêm

<%= this.Session.SessionID %> 

vào chân trang Site.Master. Sau đó tôi xây dựng lại ứng dụng và duyệt các trang khác nhau của ứng dụng và chân trang hiển thị cùng một id phiên cho tất cả các trang như mong đợi!

3

Nếu bạn nhìn vào cookie ID thụ động không được gửi tới trình duyệt trừ khi nó được sử dụng trên máy chủ.

Vì vậy, khi một trang khứ hồi không có cookie phiên ID hiện tại, do đó, một ID phiên mới được tạo, do đó nó là ngẫu nhiên.

Điều này là hợp lý, tại sao phải bận tâm lên ứng dụng cho phiên nếu phiên không được sử dụng?

24

Bạn nên khởi tạo đối tượng Phiên trong phạm vi Global.asax.cs.

void Session_Start(object sender, EventArgs e) 
{ 
    HttpContext.Current.Session.Add("__MyAppSession", string.Empty); 
} 

Cách này phiên sẽ không thay đổi trừ khi cửa sổ trình duyệt của bạn bị đóng.

0

Tôi gặp sự cố tương tự khi sử dụng Biểu mẫu web ASP.NET. Tôi chỉ cần thêm một tập tin global.asax vào giải pháp và sửa nó cho tôi.

0

Tổng hợp câu trả lời từ @jrojo và @Maxam ở trên, với những gì tôi đang sử dụng.

Tôi đang sử dụng AWS DynamoDB làm cửa hàng phiên (ngoài phạm vi câu hỏi một chút, nhưng cho mẫu).

Add gói qua NuGet: Install-Package AWS.SessionProvider

Update Web.cấu hình có phím trong appSettings:

<add key="AWSAccessKey" value="XXX" /> 
<add key="AWSSecretKey" value="YYY" /> 

Và cung cấp phiên System.Web:

<sessionState timeout="20" 
       mode="Custom" 
       customProvider="DynamoDBSessionStoreProvider"> 
    <providers> 
    <add name="DynamoDBSessionStoreProvider" 
     type="Amazon.SessionProvider.DynamoDBSessionStateStore, AWS.SessionProvider" 
     AWSProfilesLocation=".aws/credentials" 
     Table="ASP.NET_SessionState" 
     Region="us-east-1" 
     /> 
    </providers> 
</sessionState> 

Thêm bất cứ điều gì để phiên trong global.asax trên phiên đầu:

void Session_Start(object sender, EventArgs e) { 
    HttpContext.Current.Session.Add("somethingToForceSessionIdToStick", string.Empty); 
} 

Xác minh qua thêm điều này vào dao cạo của bất kỳ trang nào. Làm mới trang đó, sau đó mở một cửa sổ ignito và nhìn thấy một phiên khác nhau:

@HttpContext.Current.Session.SessionID 

BobsYourUncle