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

© 杨占伟 中级黑马   /  2012-12-5 00:02  /  1880 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨占伟 于 2012-12-5 12:35 编辑

例如:后台程序有个Session["User"] = username 来保存用户登录的名子.
Session对象是在服务器端运行的,那所有浏览此网站并登录的用户是不是都要
用这个Session["User"].
如果张三登录 Session["User"] = "张三";
如果李四登录 Session["User"] = "李四";
如果其它人登录Session["User"] = 其它用户......

如果有好多的用户,服务器该处理哪个用户的Session对象呢?是怎么处理的?
因为服务器只有一个Session对象那么名字为"张三"的能不能读到名字"李四"的Session["User"]?

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

7 个回复

倒序浏览
Asp.net已经内置了Session机制,建议不要放太多的对象到Session,Session会有超时销毁的机制。
回复 使用道具 举报
你说的是在同一个浏览器上还是不再同一个浏览器上,其实可以写一个放一个隐藏域,然后给个随机数,有用户登录的时候把在随机数Session["User"+随机数],然后在后面调用的时候就直接用随机数,当然这是母板页,如果不是母板页那么只能通过传值的方式来传递随机数
回复 使用道具 举报
你上面的写法是直接覆盖,就是重新赋值,这样只能取到一个Session值

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
如果张三登录 Session["User"] = "张三";
如果李四登录 Session["User"] = "李四";
如果其它人登录Session["User"] = 其它用户......
你写的seession["user"]只能保存一个用户,seession名一样,先前写的就被覆盖掉了,
如果改成user1 user2 user3 这样可以都保存。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
非常感谢~~~
回复 使用道具 举报
陈辉 中级黑马 2012-12-5 17:03:56
7#
不同浏览器或同一个浏览器的不同进程登录时,当登录成功,服务器会将一个SessionId(用于标注服务器重的Session对象)一cookie的形式发挥浏览器

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
每个用户的Session对象是独立的,当浏览器向服务器发出请求后,如果要启用Session,则会有一个唯一标识存储在本地的Cookie中,服务器端会在内存中以这个唯一标识开辟一块区域存储用户的Session对象。浏览器每次请求都会带着这个唯一标识,服务器会通过这个唯一标识来访问不同用户的Session,所以不同用户的Session不会冲突。
比如:
张三登录 Session["User"] = "张三";
李四登录 Session["User"] = "李四";
他们有各自的Session区域。
Session有默认超时机制,超过指定时间用户没有访问则Session被销毁。如果在Sesson中放置太多数据会较大消耗服务端资源。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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