ASP.NET_SessionId 何时生成?何时失效?有何作用呢?

相信做asp.net web开发的码友们,对ASP.NET_SessionId一定不陌生。ASP.NET_SessionId保存在浏览器cookie中。那么它是来源于哪里?何时生成?何时失效?有何作用呢?

带着这些疑问,我们开始探寻它。废话不多说,实践才是检验真理的最好方法,直接上代码。

源码地址:https://download.csdn.net/download/weixin_46879188/70103525

打开VS建立一个APS.NET MVC 程序,在HOME页面添加如下代码:

 <h5 style="color:red">第 @WebApplication1.Controllers.VisitHelper.CurrentIndex 次访问h5>
    <h5 style="color:red">Session["user"]:@(Session["user"] == null ? "null":Session["user"])h5>
    <h5 style="color:red">ASP.NET_SessionId:@HttpContext.Current.Session.SessionIDh5>
    <h5>
        <button id="clearSession" name="clearSession">清除Sessionbutton>
        <button id="clearSessionId" name="clearSessionId">清除SessionIdbutton>
    h5>

clearSession和clearSessionId这两个是ajax方式请求过去的,不会刷新页面,对应的后台方法如下:

public JsonResult ClearSession()
{
    this.Session.Abandon();
    return Json(true, JsonRequestBehavior.AllowGet);
}

public JsonResult ClearSessionId()
{
    this.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", string.Empty) { HttpOnly = true });
    return Json(true, JsonRequestBehavior.AllowGet);
}

对应的action代码如下:

public ActionResult Index(string user)
{
    VisitHelper.CurrentIndex++;
    if (!string.IsNullOrEmpty(user))
    {
        Session["user"] = user;
    }
    return View();
}

当参数user不为空时,我们则创建session保存。

好了,现在我们F5调试运行来看看效果:
ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第1张图片

继续F5刷新浏览器:

ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第2张图片

可以看到前面两次刷新浏览器 Session[“user”] 为Null ,页面ASP.NET_SessionId一直发生变化,ASP.NET_SessionId是服务器为当前请求分配的SessionID。请求Cookie里是没有ASP.NET_SessionId的。

那我们第三次 参数user传值,后台将会用session保存。如下图:
ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第3张图片

可以看到第三次,我们传值之后,后台调用的session进行存储,然后服务器给该请求分配了一个不同于前两次的sessionid。那么浏览器获得了sessionid,第四次请求会带着它去请求吗?服务器能识别吗?sessionid还会变吗?马上刷新页面,揭晓答案:

ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第4张图片

可以清楚的看到,第四次访问,请求标头是带着sessionid的,第四次sessionid和第三次一样并没有变化。继续刷新下去,也不会变的!!

很容易得出,第一二次请求,浏览器发起的请求Cookie里是没有ASP.NET_SessionId的。那么服务器就会认为,该请求是新的,就会分配新的sessionid给该请求。第三次请求,用到Session[“user”] = user操作,那么服务器会记录该sessionid。也会在Response.Cookies中存入该sessionid,并返回给了浏览器,以作为下次访问是否有效访问的凭据。

第四次,request里面已经存在sessionid了,带着sessionid请求到服务器,服务器发现sessionid,则到自己的记录去索引,找到了,认为是有效sessionid,则不再为该请求分配新的sessionid。所以第三次之后,sessionid一直保持不变。

那么理解了这些,你会问,sessionid什么时候过期?在哪种条件下过期?

既然sessionid是由于使用了session才产生的,那么我们清除掉session,sessionid会失效吗?
ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第5张图片

如图,点击清除session ,再次刷新:
ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第6张图片

可以看到,第8次session已经清空,可是sessionid依然存在,而且未改变。可见,sessionid的生命周期并未和session“同生共死”。

Session在服务器的默认有效时间是30分钟,如果在这30分钟内有带着该sessionid的请求访问,那么则会顺延。
SessionId默认是会话,跟当前类型浏览器是否全部关闭有关,我们关闭当前类型浏览器,Sessionid则会立即消失,再次访问,服务器又会分配新的SessionId。之前的SessionId对应的Session还在服务器上存在。
为了验证上面的观点,我们点击清除sessionid按钮,手动清除浏览器sessionid。

ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第7张图片

再次刷新
ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第8张图片

session存放在哪里

session存放在服务器的内存中

如下图可以看出Session里面有个属性名为SessionID.
ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第9张图片
ASP.NET_SessionId 何时生成?何时失效?有何作用呢?_第10张图片

你可能感兴趣的:(ASP.NET,SessionId)