`

SessionID的本质

 
阅读更多

一、客户端用cookie保存了sessionID

 

客户端用cookie保存了sessionID,当我们请求服务器的时候,会把这个sessionID一起发给服务器,服务器会到内存中搜索对应的sessionID,如果找到了对应的 sessionID,说明我们处于登录状态,有相应的权限;如果没有找到对应的sessionID,这说明:要么是我们把浏览器关掉了(后面会说明为什 么),要么session超时了(没有请求服务器超过20分钟),session被服务器清除了,则服务器会给你分配一个新的sessionID。你得重 新登录并把这个新的sessionID保存在cookie中。
在没有把浏览器关掉的时候(这个时候假如已经把sessionID保存在cookie中了)这个sessionID会一直保存在浏览器中,每次请求的时候都会把这个sessionID提交到服务器,所以服务器认为我们是登录的;当然,如果太长时间没有请求服务器,服务器会认为我们已经所以把浏览器关掉了,这个时候服务器会把该sessionID从内存中清除掉,这个时候如果我们再去请求服务器,sessionID已经不存在了,所以服务器并没有在内存中找到对应的 sessionID,所以会再产生一个新的sessionID,这个时候一般我们又要再登录一次。

二、客户端没有用cookie保存sessionID

 

这 个时候如果我们请求服务器,因为没有提交sessionID上来,服务器会认为你是一个全新的请求,服务器会给你分配一个新的sessionID,这就是 为什么我们每次打开一个新的浏览器的时候(无论之前我们有没有登录过)都会产生一个新的sessionID(或者是会让我们重新登录)。
当我们一旦把浏览器关掉后,再打开浏览器再请求该页面,它会让我们登录,这是为什么?我们明明已经登录了,而且还没有超时,sessionID肯定还在服 务器上的,为什么现在我们又要再一次登录呢?这是因为我们关掉浏览再请求的时候,我们提交的信息没有把刚才的sessionID一起提交到服务器,所以服 务器不知道我们是同一个人,所以这时服务器又为我们分配一个新的sessionID,打个比方:浏览器就好像一个要去银行开户的人,而服务器就好比银行, 这个要去银行开户的人这个时候显然没有帐号(sessionID),所以到银行后,银行工作人员问有没有帐号,他说没有,这个时候银行就会为他开通一个帐 号。所以可以这么说,每次打开一个新的浏览器去请求的一个页面的时候,服务器都会认为,这是一个新的请求,他为你分配一个新的sessionID。

 

sessionid是保存在客户端的cookie中的,名叫,aspnet_sessionId,如果配置文件禁用了不用cookie来保存的话,sessionid会通过url来传递,如果客户端都禁用了cookie,那就脑残了,每次浏览器都是新的请求了!

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    单用户登录组件源码

    这里使用Guid写到cookie里,注意把这个cookie设置成httponly的,当然如果你在程序里使用了Session,那么Session.SessionID就可以用来唯一标识一个用户了,Session.SessionId本质是在cookie……

    asp.net 修改/删除站内目录操作后Session丢失问题

    这里有多种解决方案: 1)利用外部进程保存 session 2)利用数据库保存 session 3)用户ID放入cookie,若检测到session为空但cookie存在在重新初始化 session. 4)将要对其进行操作的目录移出asp.net程序外 我这里使用了...

    ASP.NET中如何使用验证码效验

     ashx输出作为页面元素img的背景(属性src的值,eg:<img src="../Handler/WaterMark.ashx" id="vimg" alt="" onclick="change()" />)  .ashx文件有个缺点,他处理控件的回发事件非常麻烦,比如说如果用它来生成...

    幻影Webzine.1.7z

    Sessionid,如一些用于认证的auth-cookie,就不用担心身份被人获得了,这对于一些后台程 序和webmail提升安全性的意义是重大的。再次使用上面的攻击手法时可以看到,已经不能 获取被我们设置为HttpOnly的敏感Cookie...

    mysql数据库的基本操作语法

    constraint fk_classes_id foreign key(classes_id) references classes(id) ); 多列外键组合,必须用表级别约束语法: create table classes( id int, name varchar(20), number int, primary key(name, number) ...

    php实现商城购物车的思路和源码分析

    方法本质是:把session存入array,对array进行增加、删除、修改操作,array中的每一组记录都是一个商品的信息(个数,价格等); 解决购物车的思路是用session记录一个二维数组。一维代表每一个商品,二维包含了商品的...

    简单的php购物车代码

    方法本质是:把session存入array,对array进行增加、删除、修改操作,array中的每一组记录都是一个商品的信息(个数,价格等); 解决购物车的思路是用session记录一个二维数组。一维代表每一个商品,二维包含了商品的...

    JAVA面试题最全集

    掌握类和对象的概念,掌握面向对象编程的本质 49.静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法? 50.JAVA语言如何进行异常处理,关键字:thorws,throw,try,catch,finally 51.Object类(或者其...

    webx3框架指南PDF教程附学习Demo

    1.1.1. 框架的本质 ..................................................................................... 4 1.1.2. 基础框架 ...............................................................................

    Java面试宝典2010版

    13.删除除了id号不同,其他都相同的学生冗余信息 14.航空网的几个航班查询题: 15.查出比经理薪水还高的员工信息: 16、求出小于45岁的各个老师所带的大于12岁的学生人数 17.求出发帖最多的人: 18、一个用户表中...

    最新Java面试宝典pdf版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    Java面试笔试资料大全

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    JAVA面试宝典2010

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    Java面试宝典-经典

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    java面试题大全(2012版)

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    Java面试宝典2012版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 ...

    java面试宝典2012

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 133 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 133 11、iBatis与Hibernate有什么不同? 133 12、...

    Java面试宝典2012新版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

Global site tag (gtag.js) - Google Analytics