2012-10-29 32 views
5

Tôi đang cố gắng sử dụng một phiên nhưng khi tôi cần giá trị trở lại null của nó?Phiên làm việc [] giữ lại dữ liệu trong bao lâu?

Trang web của tôi bắt đầu bằng thông tin đăng nhập nơi tôi đặt tên người dùng vào Phiên.

Session["userName"] = login.UserName; 

Sau đó, trang web được chuyển hướng đến một trang mới.

return RedirectToAction("Choice", new { token = token }); 

sau khi tôi sử dụng liên kết để chuyển sang trang tiếp theo.

@Html.ActionLink("Download", "Download", new {token = Model.Token}) 

Nơi tôi trực tiếp mã của mình vào kết quả hành động trong Bộ điều khiển chính, cùng một bộ điều khiển tôi có chức năng đăng nhập của mình.

@Html.ActionLink("Download", "DownloadFile", new { fileid = item.Key, token = Model.Token, platform = "windows", filename = item.Value }, new {@class = "DownloadLink" }) 

Nơi tôi thử gọi lại giá trị phiên của tôi một lần nữa.

formMobiApi.GetFile(token, fileid, platform, filename, Session["userName"].ToString(), tasks, taskId, spreadSheetStatus); 

Có bất kỳ hành động nào trong số này làm bất kỳ điều gì để làm cho giá trị phiên của tôi không?

Tôi có thể sử dụng phiên như thế này không?

+1

Phiên của bạn được xử lý như thế nào? Họ dựa trên cookie hay inproc? Giá trị thời gian chờ của phiên trong web.config của bạn là gì? –

+0

Tôi không thể tìm thấy bất kỳ thời gian chờ phiên nào trong web.Config của tôi và tôi không chắc liệu phiên của tôi có dựa trên cookie hay inproc hay không, làm cách nào tôi có thể kiểm tra? – Pomster

Trả lời

9

Nếu bạn không tự thiết lập trạng thái phiên của bạn trong web.config sau đó giá trị mặc định bạn nên đã được trong quá trình (phiên được lưu trữ trong bộ nhớ RAM của máy chủ web) và thời gian chờ là 20 phút - see here for more information on session states.

Bạn có thể tự thiết lập trạng thái của bạn trong tập tin web.config của bạn như sau:

<configuration> 
    <system.web> 
     <sessionState mode="InProc" timeout="20"></sessionState> 
    </system.web> 
</configuration> 

Bây giờ, vào vấn đề thực tế của bạn. Tôi không chắc chắn lý do tại sao phiên của bạn không bền bỉ và tôi không thể tìm ra một cách khả thi vì tôi không có bản sao mã của bạn để gỡ lỗi. Tại một dự đoán tôi muốn nói rằng HttpContext của bạn khác với khi bạn khởi tạo phiên, khi bạn yêu cầu và vì vậy khóa ngữ cảnh của bạn khác nhau. Hãy thử thay đổi

Session["userName"].ToString(); 

để

HttpContext.Current.Session["userName"].ToString(); 

này trông hơi kỳ quặc ở cái nhìn đầu tiên, như bạn đang có hiệu quả làm điều tương tự. Sự khác biệt đi xuống nếu đối tượng hiện tại không có quyền truy cập vào HttpContext bạn cần xác định rõ ngữ cảnh cần đọc từ đó.

Có một cái nhìn khác về mã bạn đã cung cấp, không có gì khác thường - điều này sẽ hiệu quả. Tôi thực sự bắt đầu tin rằng đây là một vấn đề môi trường/cấu hình. Nếu bạn đang sử dụng Xác thực mẫu thì hãy kiểm tra thời gian chờ của bạn trong tệp web.config của bạn. Ngoài ra, nếu bạn đang lưu trữ trong IIS (và không phải máy chủ web của Visual Studio - mặc dù bạn cũng nên kiểm tra điều này!) Hãy thử xóa nhóm ứng dụng của bạn và tạo lại nó.

Các vấn đề liên quan