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

ASP.NET_SessionId 何时生成?何时失效?有何作用呢?相信做asp.netweb开发的码友们,对ASP.NET_SessionId一定不陌生。ASP.NET_SessionId保存在浏览器cookie中。那么它是来源于哪里?何时生成?何时失效?有何作用呢?带着这些疑问,我们开始探寻它。废话不多说,实践才是检验真理的最好方法,直接上代码。打开VS建立一个APS.NETMVC程序,在HOME页面添加如下代码:clearSession和clearSessionId这两个是ajax方式请求过去的,不会刷新页面,对应的后台方法如下:对应的action代

大家好,又见面了,我是你们的朋友全栈君。

相信做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.SessionID</h5>
    <h5>
        <button id="clearSession" name="clearSession">清除Session</button>
        <button id="clearSessionId" name="clearSessionId">清除SessionId</button>
    </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调试运行来看看效果:

在这里插入图片描述

继续F5刷新浏览器:
在这里插入图片描述

可以看到前面两次刷新浏览器 Session[“user”] 为Null ,ASP.NET_SessionId 却发生了变化。那我们第三次 参数user传值,后台将会用session保存。如下图:
在这里插入图片描述

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

在这里插入图片描述

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

很容易得出,第一二次请求,浏览器发起的请求标头里是没有sessionid的。那么服务器就会认为,该请求是新的,就会分配新的sessionid给该请求。如果该请求在本次访问中,未用到session操作,那么
服务器则认为该sessionid是无效的,服务器为节省资源开销,则不会记录该sessionid。也不会在Response.Cookies中存入该sessionid。只有在第三次存入session之后,服务器才认为是有效的,才记录下了第三次的sessionid,
并返回给了浏览器,以cookie的方式存取,以作为下次访问是否有效访问的凭据。

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

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

既然sessionid是由于使用了session才产生的,那么我们清除掉session,sessionid会失效吗?
在这里插入图片描述

如图,点击清除session ,再次刷新:
在这里插入图片描述

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

session在服务器的默认有效时间是30分钟,如果在这30分钟内有带着该sessionid的请求访问,那么则会顺延。如果在这段时间,我们关闭浏览器,浏览的sessionid则会立即消失,再次访问,服务器又会分配新的sessionid。之前的sessionid还在服务器上存在,

会在因为过有效期被系统销毁,以清理资源空间。

为了验证上面的观点,我们点击清除sessionid按钮,手动清除浏览器sessionid。

在这里插入图片描述

再次刷新
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160420.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland2022.01 激活码_最新在线免费激活2022.01.29

    (goland2022.01 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    385
  • 使用Postman做mock测试

    使用Postman做mock测试为什么要做mock测试?一般在对第三方接口(如银联、支付宝、微信等),使用mock来模拟被请求的接口还有是在业务依赖的关系接口未开发出来时,测试人员为了保证项目的测试进度不受影响,就需要构造出来一个虚拟的接口来进行一系列的接口测试一、打开postman,创建mockserver在左上角有一个New,点开后会有下拉列表展示,选择里面的MockServer勾选Request-Body(请求内容)填写mock测试的各个请求参数之后点击Next,下一步createmockserv.

    2022年6月20日
    43
  • unity和虚幻引擎_drawcall优化

    unity和虚幻引擎_drawcall优化阅读目录前言:看看优化需要从哪里着手?CPU的方面的优化:GPU的优化内存的优化回到目录前言:刚开始写这篇文章的时候选了一个很土的题目。。。《Unity3D优化全解析》。因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的余地就少了很多。但又觉得这块是不得不提的一个地方,平时见到很多人对此处也给予了忽略了事,需要时…

    2022年9月16日
    0
  • WebService接口的生成和调用(WebService接口)

    WebService接口的生成和调用(WebService接口)目录一:WebService的服务端发布1:发布web程序服务端发布2:本地发布二:Webservice客户端调用:1:本地生成代码,直接调用:2、利用dos命令生成代码,和第一种基本一致3:利用apache的AXIS直接调用远程的webservice4:service编程实现调用5:Ht……

    2022年7月12日
    13
  • 输入3个数a,b,c,要求输出最大值_二维数组求最大值及下标

    输入3个数a,b,c,要求输出最大值_二维数组求最大值及下标7-1 求最大值及其下标 (20分) 本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。输入格式: 输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。输出格式: 在一行中输出最大值及最大值的最小下标,中间用一个空格分开。 输入样例: 6 2 8 10 1 9 10 输出样例: 10 2#inc…

    2022年8月18日
    3
  • 全局莫兰指数_空间自相关 | 莫兰指数

    全局莫兰指数_空间自相关 | 莫兰指数空间自相关:是指一些变量在同一个分布区内的观测数据之间潜在的相互依赖性。其中,自相关中的“自”表示当你进行相关性观察统计量,是来源于不同对象的同一属性。Tobler(1970)曾指出“地理学第一定律:任何东西与别的东西之间都是相关的,但近处的东西比远处的东西相关性更强”。空间自相关统计量是用于度量地理数据(geographicdata)的一个基本性质:某位置上的数据与其他位置上的数据间…

    2022年6月25日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号