会话变量不存储值

时间:2017-03-15 13:38:59

标签: c# mysql asp.net session

我有一个会话变量,我试图从另一个变量(字符串)给出值。但是,当我这样做时,如下所示,它不存储该值。

DataTable table = new DataTable();

MySqlCommand select = new MySqlCommand("SELECT personID, address_addressID from person WHERE email='" + emailAddress + "' and password = '" + passwordR + "'", connect); //brings back the person ID if user details are correct           
using (MySqlDataAdapter adapter = new MySqlDataAdapter(select))
{
    adapter.Fill(table);

        if (table.Rows.Count != 0)
        {

            string sessionVar = table.Rows[0]["personID"].ToString();
            Session["personID"] = sessionVar;

sessionVar变量是正确的数据但不会输入到Session中,这是不是错误地完成了?

编辑:我已经包含了一些更多的上下文来制作这个MVCE。

2 个答案:

答案 0 :(得分:2)

问题摘要:在分配Response.Redirect(URL, true);数据后使用Session时,您会发现它不会被存储。您需要在方法上使用return;并使用Response.Redirect(URL, false);

说明:
可以找到一个很好的解释Twitter。这是主要部分的片段:

当您创建新会话(即第一次写入Session变量)时,ASP.NET会在包含会话令牌的客户端上设置易失性cookie。在所有后续请求中,只要服务器会话和客户端cookie未过期,ASP.NET就可以查看此cookie并找到正确的会话。 现在,重定向的作用是向客户端发送一个特殊的标头,以便它向服务器请求与其等待的页面不同的页面。服务器端,在发送此标头后,重定向结束响应。这是一件非常暴力的事情。 Response.End实际上使用ThreadAbortException停止页面的执行。 这里真正发生的是会话令牌在战斗中丢失。

答案 1 :(得分:0)

您是否能够在相同的请求上下文中访问会话值,但不能在后续请求中访问会话值?

Asp.net的默认实现是将会话ID存储在cookie中,以便可以在后续请求中对其进行访问。创建会话后,检查您的浏览器cookie,以查看会话ID是否存在。 Chrome不会为不安全的网站存储Cookie,因此,如果您是从本地主机运行的,则可能需要使用其他浏览器进行测试。

如何在Edge中查看localhost cookie: enter image description here

有关在chrome中为不安全的网站存储cookie的信息,请参见以下答案: Cookies no longer save for insecure sites in Google Chrome