0

我正在创建一个电影票预订项目。我想从 page1 获取用户名并将其显示在 page2 上(使用会话变量)

第 1 页:

 string uname = TextBox1.Text;
 Session["UName"] = uname;
 Session.Timeout = 30;

第2页:

 if ((string)Session["UName"] != null)
        {
            string user = (string)Session["UName"];
        }

我在 page2 中放置了一个退出按钮以删除会话变量值。但会话变量始终为空。我已经在 page1 中使用了 cookie,这会是一个原因吗?还是什么?请帮忙。提前致谢。

4

3 回答 3

1

有关 Session 何时可以为空的信息,请参阅此答案:

如果当前的 ASP.NET 会话为空,我该怎么办?

当我使用带有完成回调的异步请求时,我个人经常遇到这个问题。在这些回调中,我想在会话中设置一些东西,但它是空的。

于 2013-10-03T14:21:01.147 回答
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"  />
于 2013-10-03T14:30:57.650 回答
0

我也有同样的问题,我在调试本地主机上的两个不同站点之间切换,并且会话 ID 有两个 cookie。

我通过 Chrome 的开发者工具 [Press F12 in Browser]->Application->Storage->Cookies 删除了 cookie

于 2018-05-21T21:42:34.707 回答