A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mdb 中级黑马   /  2014-3-27 13:03  /  3358 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 mdb 于 2014-3-27 21:21 编辑

发现Session中的Session.Abandon()和Session.Clear()方法都能实现退出登陆的功能,那么这两个方法有什么区别吗?什么时候用Abandon什么时候用Clear?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

12 个回复

倒序浏览
Session.Clear()就是把Session对象中的所有项目都删除了,Session对象里面啥都没有。但是Session对象还保留 。
Session.Abandon()就是把当前Session对象删除了。
回复 使用道具 举报
Clear(): 从会话状态集合中移除所有的键和值
Abandon():把当前Session对象删除,下一次就是新的Session
所以可以理解,你做登出功能时,用Abandon()方法比较合适,如果用Clear(),登出后虽然session中的键值已经移除,但此session对象仍存在,既然不需要为何还保留它,所以个人认为Abandon()方法更合适,希望对你有帮助,谢谢
回复 使用道具 举报
cmcm2014 发表于 2014-3-27 13:23
Clear(): 从会话状态集合中移除所有的键和值
Abandon():把当前Session对象删除,下一次就是新的 ...

如果是新的Session那么sessionID是不是新的呢?
回复 使用道具 举报
mdb 发表于 2014-3-27 13:33
如果是新的Session那么sessionID是不是新的呢?

SessionID 属性用于唯一地标识在服务器上包含会话数据的浏览器。 SessionID 值由 ASP.NET 随机生成,并存储在浏览器的不过期 Cookie 中。 每次向 ASP.NET 应用程序发送请求时,SessionID 值便被发送到 Cookie 中。
这是MSND中对SessionID的解释,从中可以看出,sessionID是唯一的,所以SessionID应该是新的。
回复 使用道具 举报
cmcm2014 发表于 2014-3-27 13:37
SessionID 属性用于唯一地标识在服务器上包含会话数据的浏览器。 SessionID 值由 ASP.NET 随机生成,并存 ...

我发现直接调用Abandon后再次进行连续发现还是原来的sessionid,后来再后面加了句代码Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));后再连接这次Sessionid就是新的了。如果每次都让服务器生成新的Sessionid对服务器有什么影响吗,是用原来的好还是每次都生成新的ID好点?
回复 使用道具 举报
mdb 发表于 2014-3-27 13:47
我发现直接调用Abandon后再次进行连续发现还是原来的sessionid,后来再后面加了句代码Response.Cookies.A ...

兄弟不好意思啊,在前面回答你的问题时,我只是也自己的理解去帮你解释,现在重新查了下文档,发现我前面的回答是错误的。
Session.Abandon是将服务器上该网站的所有session都删除.session是会话级别的变量,即使不调用Abandon方法,在会话超时后,服务器上保留的值仍然会被清空,所有web编程脚本都会有这个问题;Sessionid是完全随机的,一个session变量大约会占用10k的内存。需要了解的是,不管程序是否使用session,SessionID总是存在的,而且会以cookie的方式发送到浏览器。

单一用户退出登陆时尽量用清空的方法,而不要用Session.Abandon()这删除的方法.
如:session("userid") = ""
直接将session("userid")变量置空即可`~`
或者使用Session.Contents.Remove("UserName")来删除session("UserName")的变量引用。
也可用Session.Contents.RemoveAll来删除所有的Session的变量引用

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
mdb 中级黑马 2014-3-27 14:01:12
8#
cmcm2014 发表于 2014-3-27 13:56
兄弟不好意思啊,在前面回答你的问题时,我只是也自己的理解去帮你解释,现在重新查了下文档,发现我前面 ...

很详细,那么这样用clear不是更好吗,只是删除了里面的内容,不会重新生成新的ID
回复 使用道具 举报
mdb 发表于 2014-3-27 14:01
很详细,那么这样用clear不是更好吗,只是删除了里面的内容,不会重新生成新的ID ...

Session.Contents.RemoveAll和Seesion.clear貌似等效的。兄弟可以测试一下
回复 使用道具 举报
mdb 中级黑马 2014-3-27 14:20:25
10#
cmcm2014 发表于 2014-3-27 14:08
Session.Contents.RemoveAll和Seesion.clear貌似等效的。兄弟可以测试一下

确实一样,RemoveAll最后也是调用了clear的方法
回复 使用道具 举报
mdb 中级黑马 2014-3-27 14:21:26
11#
zou5268237 发表于 2014-3-27 13:15
Session.Clear()就是把Session对象中的所有项目都删除了,Session对象里面啥都没有。但是Session对象还保留 ...

谢谢,现在了解了...
回复 使用道具 举报
mdb 发表于 2014-3-27 14:20
确实一样,RemoveAll最后也是调用了clear的方法

:handshake 希望以后有问题公共讨论
回复 使用道具 举报
mdb 中级黑马 2014-3-27 17:57:26
13#
cmcm2014 发表于 2014-3-27 14:56
希望以后有问题公共讨论

:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马