【问题标题】:ASP.Net MVC-generate new HttpContext.Session.SessionID after requestASP.Net MVC-在请求后生成新的 HttpContext.Session.SessionID
【发布时间】:2019-07-26 10:41:34
【问题描述】:

我在用户登录时使用 asp.net MVC 创建了一个应用程序我使用

保存会话 ID 的值

Session["SessionId"] = HttpContext.session.SessionId

在会话期间,当用户在名为“NewQuotee”的页面上创建新请求时,我想生成新的 SessionId 并将新值分配给 Session["SessionId"] 我该怎么做?

【问题讨论】:

  • 为什么不清除旧会话并像 Session["SessionId"] = null; Session["SessionId"]="New Value" 这样重新分配新值?
  • @Parvez 在进一步阅读 asp 后没有办法从客户端浏览器重新生成新的 sessionid,所以即使你使用了 'Session.Clear()' 或 'Session.Abandon()' 这个不会在客户端浏览器中重新生成新的会话 ID,请参阅 link 这是一本很好的读物,我将在答案部分发布我如何解决我的问题

标签: c# asp.net-mvc session


【解决方案1】:

因此,在进一步阅读之后,他们无法直接请求客户端浏览器重新生成新的会话 ID,即使我使用了 Session.Clear()、Session.RemoveAll() 或 Session.Abandon(),它也不会为我服务需要(您可以阅读这篇文章Link 中的差异,这是一个很好的阅读),所以在一天结束时,我使用 sessionid 作为通用字符串来识别页面请求末尾的更新语句的数据库记录所以我创建了一个函数,通过每次调用生成一个随机的 20 个字符串并将值分配给一个全局 var,这个 var 可以在我的插入/更新请求中使用,我创建的生成随机字符串的方法如下:-

public static string GenerateSessionID()
    {
        char[] characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray();
        Random r = new Random();
        System.Threading.Thread.Sleep(10);
        string randomstring = "";
        for (int i = 0; i < 20; i++)
        {
            randomstring += characters[r.Next(0, 60)].ToString();
        }

        return randomstring;
    }

帮助理解代码

char[] characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray();

这行代码将创建一个 char 数组,包括所有大小写的数字字母,你可以放任何你想要的字符

Random r = new Random();

在这里你创建一个随机类的对象“r”

string randomstring = "";

只是创建一个字符串来保存生成的键的值

for (int i = 0; i < 20; i++)

你可以通过增加或减少“i”的最大值来定义随机密钥的长度

 r.Next(0, 60)

方法 r.Next(0,60) 返回一个介于 0, 60 之间的随机数; r.下一个(最小,最大);你可以调用 r.Next() 它会得到任何随机数 我定义了最小值和最大值,因为我将使用生成的数字作为字符数组的索引

randomstring += characters[r.Next(0, 60)].ToString();

我想现在已经自我解释了,每次循环时,带有索引 random 的字符数组中的 char 将连接到 randomstring

System.Threading.Thread.Sleep(10);

现在我使用 thread.sleep 10 毫秒的原因是,当你不断调用随机 .next() 函数而没有任何中断时,它将返回相同的值,我简要阅读了它,我一直在减小值直到我达到 2 的毫秒数,有时它会产生一个新值,有时不是为了安全起见,我将值设置为 10

现在我在需要时调用该函数并将值放在字符串中并使用它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多