2012-10-29 49 views
5

我想使用一個會話,但是當我需要返回它的空值?會話[]保留數據多久?

我的網站從一個登錄名開始,我把用戶名放到一個Session中。

Session["userName"] = login.UserName; 

然後網站被重定向到一個新的頁面。

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

後女巫我使用鏈接移動到我的下一頁。

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

在哪裏我直接把我的代碼的行動結果的首頁控制器相同的控制器我有我的登錄功能。

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

我在哪裏嘗試再次調用我的會話值。

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

這些操作中的任何一個是否在執行任何操作以使我的會話值爲空?

我可以使用這樣的會話嗎?

+1

您的會話如何處理?他們是基於cookie還是inproc?您的web.config中的會話超時值是什麼? –

+0

我無法在我的web.Config中找到任何會話超時,並且我不確定我的會話是基於cookie還是inproc,我將如何檢查? – Pomster

回答

9

如果不手動設置您的會話狀態在web.config中,那麼你應該在進程(會話存儲在Web服務器的RAM)的默認和超時20分鐘 - see here for more information on session states

您可以手動與下面的設置你的狀態在你的web.config文件:

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

現在,在您的實際問題。我不完全確定你的會話爲什麼不會持續下去,而且我也無法找到答案,因爲我沒有要調試的代碼副本。在猜測中,我會說你的HttpContext與初始化會話的時間不同,當你請求它的時候,所以你的上下文關鍵字是不同的。嘗試改變

Session["userName"].ToString(); 

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

這乍看上去有點古怪,因爲你切實做好同樣的事情。區別在於,如果當前對象無法訪問HttpContext,則需要明確定義要從中讀取的上下文。

再看看你提供的代碼,沒有什麼不尋常的 - 這應該是有效的。我真的開始相信這是一個環境/配置問題。如果您使用表單身份驗證然後檢查您的web.config文件中的超時。另外,如果您在IIS中託管(而不是Visual Studio的Web服務器 - 儘管您也應該檢查它!),請嘗試刪除您的應用程序池並重新創建它。