我正在创建一个电影票预订项目。我想从page1获取用户名并在第2页上显示(使用会话变量)
第1页:
string uname = TextBox1.Text;
Session["UName"] = uname;
Session.Timeout = 30;
2页:
if ((string)Session["UName"] != null)
{
string user = (string)Session["UName"];
}
我在第2页放了一个注销按钮来删除会话变量值。但是session变量始终为null。 我已经在页面1中使用了cookie,这是一个原因吗?或者还有什么?请帮忙。提前谢谢。
答案 0 :(得分:1)
当Session可以为null时,请参阅此答案:
What should I do if the current ASP.NET session is null?
当我使用具有完成回调的异步请求时,我个人经常遇到此问题。在这些回调中,我想在会话中设置一些东西,它是空的。
答案 1 :(得分:1)
在设置会话变量后执行Response.Redirect
时通常会发生这种情况。您可以通过调用重载来解决此问题:
Response.Redirect("...", false); // false = don't stop execution
//causes ASP.NET to bypass all events and filtering in the HTTP pipeline
//chain of execution and directly execute the EndRequest event
HttpContext.Current.ApplicationInstance.CompleteRequest();
底层问题是ThreadAbortException
,它经常被忽略,因为它不会破坏应用程序。这是一个已知问题,您可以在此处详细了解:http://support.microsoft.com/kb/312629。
旁注
另外,您不应该像这样重置代码中的Session.Timeout
值。我无法确定,但这可能会对您的逻辑产生负面影响。相反,您应该在web.config
部分下的system.web
指定会话超时:
<sessionState timeout="60" />
答案 2 :(得分:0)
我也有同样的问题, 我在调试localhost上的两个不同站点之间切换,并且会话ID有两个cookie。
我通过Chrome的开发者工具删除了Cookie [在浏览器中按F12] - &gt;应用程序 - &gt;存储 - &gt; Cookie