0

在我的页面中,每次单击按钮以转到下一页时,我都会重新生成会话 ID。在登录时,我已经将用户名保存在我的会话变量 (session["uname"]=txtusername.text) 中。但是当我重新生成新的会话 id 时,session["uname"] 的引用为空,因为的新会话 id。这就是为什么我想 在会话启动函数中使用Global.asax设置会话变量值。

void Session_Start(object sender, EventArgs e) 
    {
       session["uname"]=here;
    }

但是在 Global.asax 页面中,我无法从我的登录页面访问任何值。. 主要问题是从后面的代码访问 global.asax 中的任何值。 我该如何解决这个问题......请帮助......提前致谢............

4

2 回答 2

0

首先不要在 Global.asax 中编写业务逻辑。我想指出 3 点基本的东西:

  1. 当 session_start() 调用
  2. 如何维护会话
  3. 您应该在哪里设置会话变量。

对于以下详细信息,我假设您有 login.aspx、login.aspx.cs:

如您所知,HTTP 是无状态协议,因此每个请求都是新请求。所以对于每个请求 session_start() 都会被执行。

当用户第一次请求资源时,将生成唯一的会话,并将包含会话 ID 的 cookie 发送给客户端。

对于用户的任何进一步请求,HTTP 客户端会将 cookie 传递给服务器,以便服务器可以跟踪用户。这就是会话的工作方式。


现在让我们来看看您在 Globlax.asax 的 session_start() 中设置 Session["uname"] 的代码,请记住,在页面生命周期开始之前调用 Globlax.asax,因此它无法访问页面数据。

Instade 你应该在 login.aspx.cs 文件中设置你的 Session["uname"]。此处检查用户凭据是否正确:
设置 Session["uname"]=value。

现在对于该用户的所有其他请求 Session["uname"] 将可用。您还可以检索/更新 Global.asax 的 session_start() 中的值。

于 2012-07-19T06:36:16.387 回答
0
HttpContext.Current.Session["uname"]=here;
于 2012-07-18T07:30:53.470 回答