同一浏览器中同一JavaWeb程序不共享session方法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/b2084005/article/details/30222735
1、要求
在使用struts1开发JavaWeb项目中,要求超级管理员登录进入之后,展示普通用户列表,在普通用户列表中添加管理用户按钮,点击后,在浏览器中另外弹出一个标签页,而且该标签页是选中的普通用户登录后的界面。
2、产生问题
a、点击普通用户登录后,session中的用户信息已经变为了该用户的信息了,如果再次刷新超级管理员登录的界面,此时,界面就变为选中的普通用户登录的界面了。
b、同一个系统,在同一浏览器中的session的ID是相同的,此sessionID是服务器创建session产生的,无法在客户端修改sessionid,若想修改sessionid,得从服务器端修改(没试过)。
3、解决办法
a、生成一个不重复的值,我取名为sid
例、Random random = new Random();
StringBuffer sid = new StringBuffer();
sid = sid.append(System.currentTimeMillis()); //取系统时间
// 加上10为0-9随机数确保sid不重复
for (int i = 0; i < 10; i++) {
sid = sid.append(random.nextInt(10));
}
b、把需要的用户相关的字段和sessionid一起写到一个Map中
例、Map sessionMap = new HashMap();
sessionMap.put("username", username);
sessionMap.put("userpwd", userpwd);
sessionMap.put("sessionid", session.getId());
sessionMap.put("usertype", userbean.getUsertype());
c、把sid和map关联起来添加到session中
例、session.setAttribute(sid.toString(), sessionMap);
d、把sid传递给jsp页面(需通过sid获取用户信息)
例、ActionRedirect redirect = new ActionRedirect(actionMapping
.findForward("index"));
redirect.addParameter("sid",sid.toString()); request.getSession().setAttribute("userbean",userbean);
return redirect;
e、jsp页面通过sid获取用户信息
例、String sid = request.getParameter("sid");
Map utitle = new HashMap();
utitle = (Map)request.getSession().getAttribute(sid);
String username = (String)utitle.get("username");
String usertype = (String)utitle.get("usertype");
String uid = (String)utitle.get("uid");
System.out.println(uid+"=====uid===~~~====");
f、把获取的值传递给需要的页面
例、 <iframe scrolling="auto" frameborder="0" height="100%" width="100%"src="<%=appContext %>/main/main.jsp?usertype=<%=usertype %>&uid=<%=uid %>" name="mainFrame"></iframe>
g、jsp页面获取需要的值
例、String usertype1 = "";
String uid = "";
usertype1 = (String)request.getParameter("usertype");
uid = (String)request.getParameter("uid");
参考文章:http://vearn.iteye.com/blog/376407 、
http://www.blogjava.net/DreamAngel/archive/2012/06/08/380306.html和
http://aazham.iteye.com/blog/1184220
---------------------
作者:b2084005
来源:CSDN
原文:https://blog.csdn.net/b2084005/article/details/30222735
版权声明:本文为博主原创文章,转载请附上博文链接!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端