同一浏览器中同一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
版权声明:本文为博主原创文章,转载请附上博文链接!
同一浏览器中同一JavaWeb程序不共享session方法的更多相关文章
- c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0);
本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit ...
- JavaScript在浏览器中把文本保存为文件的方法
JavaScript在浏览器中把文本保存为文件的方法 经过测试第二种方法可以保存更多的文本不至于卡死 var saveTextAsFile1 = function (text, fileName, s ...
- 将Chrome浏览器中的扩展程序导出为crx插件文件
将Chrome浏览器中安装的插件程序导出为crx插件文件 以360急速浏览器为例进行导出crx插件程序 1.在Chrom商店中找到需要的插件,安装到浏览器的扩展程序里面()IDM Integratio ...
- 4┃音视频直播系统之浏览器中通过 WebRTC 进行桌面共享
一.共享桌面原理 共享桌面在直播系统中是一个必备功能 共享者:每秒钟抓取多次屏幕,每次抓取的屏幕都与上一次抓取的屏幕做比较,取它们的差值,然后对差值进行压缩:如果是第一次抓屏或切幕的情况,即本次抓取的 ...
- C# 新建 exe文件,并且自定义协议从浏览器中启动该程序
1. C# 新建一个 exe 文件: 打开你的 vs ,[文件] ---> [新建] ---> [项目] 选择 Windows 窗体应用,并起一个名字: 接着该文件会在当前项目的 myap ...
- 将Winform程序快速转换为在浏览器中运行的程序
http://www.codeproject.com/Articles/31429/Embedding-a-NET-WinForms-Application-in-an-Interne 详见以上文章. ...
- 在AndroidManifest.xml文件中设置Android程序的启动界面方法
从网上搜集了一堆的Android代码,比如Android的Login程序和Android的Helloworld程序,但是却总不能正确运行一个正确的程序,郁闷了很久,终于在一次一次的测试后成功的在And ...
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
当我们搞定DataSnap后,我们进入客户端程序开发阶段了,我们建立了客户端模块后,打算按照刚才开发服务器的步骤开发客户端程序,随后加入了DBExpress的TSQLDataSet,设定数据库连接后, ...
- 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法
单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...
随机推荐
- 第三篇:异步请求遇上for循环怎么做
场景:读取Excel数据(地名),发送请求到百度地图,从返回的json格式数据取出坐标数据(逗号隔开的两个float型数值),拼接成了分号隔开的一个字符串data,接下来需要利用“百度坐标转换API” ...
- Java 12 正式发布,8大新特性!
自 2 月 7 日开始,Java/JDK 12 就进入了 RC 阶段.按照发布周期,美国当地时间 3 月 19 日,也就是北京时间 20 号 Java 12 正式发布了! △ JDK 12 GA 发布 ...
- jmeter-测试https请求
找了一个HTTPS请求的网站尝试. 我用的是chrome,点这个小锁(如果是IE也可以在网页上右键,属性,高级,证书) 或 看到下图,点击“复制到文件” 或 把导出的证书打成.store 用此命令进行 ...
- Maven使用初步
一.安装: 1.下载:http://maven.apache.org/download.cgi 2.设置环境变量 1.创建"M2_HOME",值为Maven安装路径(如:D:\Ja ...
- 用MapReduce实现关系的自然连接
- Entity Framework Code First 模式-建立多对多联系
Entity Framework 在建立多对多的联系时,会生成一个中间表,用来表示这个多对多的关系.这和数据库设计时从概念模型到逻辑模型转化时,多对多的关系不能和任何一端的实体合并,需要将关系也转化为 ...
- 2016.9.24初中部上午NOIP普及组比赛总结
2016.9.24初中部上午NOIP普及组比赛总结 2016.09.24[初中部 NOIP普及组 ]模拟赛 其实这次我没比赛,早上去参加亲子活动去了. 不过在下午我做完了所有的题,感觉还好. 进度 现 ...
- Python-进程(1)
目录 操作系统发展史 穿孔卡片 联机批处理系统 统计批处理系统 单道 多道技术 空间上复用 时间上复用 并行与并发 进程 程序与进程 进程调度 进程的三个状态 就绪态 运行态 阻塞态 同步和异步 阻塞 ...
- python事件调度库sched
事件调度 sched模块内容很简单,只定义了一个类.它用来最为一个通用的事件调度模块. class sched.scheduler(timefunc, delayfunc)这个类定义了调度事件的通用接 ...
- 凉凉了,Eureka 2.x 停止维护,Spring Cloud 何去何从?
今年 Dubbo 活了,并且被 Apache 收了.同时很不幸,Spring Cloud 下的 Netflix Eureka 组件项目居然宣布停止开发了.. 已经从 Dubbo 迁移至 Spring ...