同一浏览器下多个页面sessionid覆盖

现在的大多浏览器都是共享sessionid的,因此,在使用一个tomcat并且在一个浏览器下打开多个session的时候,新的内容会把原来的同key内容覆盖。

解决方法:

1.使用多个tomcat/多个浏览器。

2.修改conf文件,制造出localhost1、locaohost2等。

3.在前端的httpsession中以用户id(唯一的)为键进行存储用户信息,使得每次都不会覆盖上一次的内容。用户id可以通过url传参在前端进行传输。

4.在前端的js文件中定义全局变量得到userid值,但是刷新后可能再次运行新的式子被覆盖。

后来发现实现这个效果收益并不大,而且只是做上课的作业,就没深入研究了。

要实现防止同一账号在同一时间重复登录同一网站,并且在浏览器关闭时自动退出登录,可以结合使用 Session 和 Cookie 来实现。 1. 在用户登录成功后,将用户的唯一标识(如用户名、用户ID等)存储到 Session 中,并生成一个随机的令牌(token)作为用户的身份标识。 2. 将该令牌存储一个全局的数据结构(如 Dictionary 或数据库),以便在后续的请求中进行验证。 3. 将该令牌存储一个 HttpOnly 的 Cookie 中,并设置过期时间。 4. 在每个页面的 Page_Load 方法中,验证 Session 中的身份令牌和 Cookie 中的令牌是否一致,如果不一致,则表示用户在其他地方登录,可以执行相关操作(如强制退出、提示用户等)。 5. 当浏览器被关闭时,由于 Cookie 设置了过期时间,该 Cookie 将被自动删除。在下次用户访问网站时,由于没有有效的身份令牌,用户将被视为未登录状态。 下面是一个简单的示例代码: ```csharp // 用户登录成功后的代码 string username = "用户名"; // 将实际的用户名替换为登录时获取的用户名 string token = Guid.NewGuid().ToString(); // 生成一个随机的令牌 // 存储用户信息到 Session Session["LoggedInUser"] = username; Session["AuthToken"] = token; // 存储用户令牌到全局的数据结构(如 Dictionary 或数据库) // 这里使用全局的 Application 对象来存储用户令牌 Dictionary<string, string> userDictionary = (Dictionary<string, string>)Application["UserDictionary"]; userDictionary[token] = username; // 将用户令牌存储到 Cookie,并设置过期时间 HttpCookie authCookie = new HttpCookie("AuthToken", token); authCookie.Expires = DateTime.Now.AddMinutes(30); // 设置过期时间,自行调整 authCookie.HttpOnly = true; // 设置 HttpOnly,防止被 JavaScript 访问 Response.Cookies.Add(authCookie); // 其他处理... // 重定向到需要跳转的页面 Response.Redirect("WebForm1.aspx"); ``` 在每个页面的 Page_Load 方法中验证身份令牌和 Cookie: ```csharp // 页面加载时的代码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["LoggedInUser"] != null && Session["AuthToken"] != null) { string loggedInUser = Session["LoggedInUser"].ToString(); string authToken = Session["AuthToken"].ToString(); // 获取 Cookie 中的令牌 HttpCookie authCookie = Request.Cookies["AuthToken"]; if (authCookie != null && authCookie.Value == authToken) { // 令牌一致,用户已登录 // 继续正常处理... } else { // 令牌不一致,可能是在其他地方登录了 // 执行相关操作(如强制退出、提示用户等) // 其他处理... // 重定向到登录页面或其他页面 Response.Redirect("Login.aspx"); } } else { // 用户未登录 // 其他处理... // 重定向到登录页面或其他页面 Response.Redirect("Login.aspx"); } } } ``` 请注意,上述代码仅为示例,实际应用中可能需要进行更多的错误处理和安全验证。另外,为了保证数据的一致性和安全性,可能需要考虑使用线程安全的集合(如 ConcurrentDictionary)来存储用户信息,并加入适当的过期机制来清理过期的用户信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值