版权声明:本文为博主原创文章,未经博主允许不得转载。 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方法的更多相关文章

  1. c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0);

    本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit ...

  2. JavaScript在浏览器中把文本保存为文件的方法

    JavaScript在浏览器中把文本保存为文件的方法 经过测试第二种方法可以保存更多的文本不至于卡死 var saveTextAsFile1 = function (text, fileName, s ...

  3. 将Chrome浏览器中的扩展程序导出为crx插件文件

    将Chrome浏览器中安装的插件程序导出为crx插件文件 以360急速浏览器为例进行导出crx插件程序 1.在Chrom商店中找到需要的插件,安装到浏览器的扩展程序里面()IDM Integratio ...

  4. 4┃音视频直播系统之浏览器中通过 WebRTC 进行桌面共享

    一.共享桌面原理 共享桌面在直播系统中是一个必备功能 共享者:每秒钟抓取多次屏幕,每次抓取的屏幕都与上一次抓取的屏幕做比较,取它们的差值,然后对差值进行压缩:如果是第一次抓屏或切幕的情况,即本次抓取的 ...

  5. C# 新建 exe文件,并且自定义协议从浏览器中启动该程序

    1. C# 新建一个 exe 文件: 打开你的 vs ,[文件] ---> [新建] ---> [项目] 选择 Windows 窗体应用,并起一个名字: 接着该文件会在当前项目的 myap ...

  6. 将Winform程序快速转换为在浏览器中运行的程序

    http://www.codeproject.com/Articles/31429/Embedding-a-NET-WinForms-Application-in-an-Interne 详见以上文章. ...

  7. 在AndroidManifest.xml文件中设置Android程序的启动界面方法

    从网上搜集了一堆的Android代码,比如Android的Login程序和Android的Helloworld程序,但是却总不能正确运行一个正确的程序,郁闷了很久,终于在一次一次的测试后成功的在And ...

  8. Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!

    当我们搞定DataSnap后,我们进入客户端程序开发阶段了,我们建立了客户端模块后,打算按照刚才开发服务器的步骤开发客户端程序,随后加入了DBExpress的TSQLDataSet,设定数据库连接后, ...

  9. 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法

    单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...

随机推荐

  1. webjars和springboot热启动

    webjars WebJars将Web前端Javascript和CSS等资源打包成Java的Jar包, 以便能使Maven的依赖管理支持静态JavaScript库/CSS库,比如jQuery.layu ...

  2. 一个WordCount执行过程的实例

  3. 【左偏树】[LuoguP1456] Monkey King

    多...多组数据... awsl 死命的MLE,原来是忘记清空数组了.... 左偏树模板? 对于每一个操作,我们把两个节点$x,y$的祖先$fx,fy$找到,然后把他们的左右儿子分别合并 最后把$v[ ...

  4. AutoIt自动化编程(2)【转】

    注意:窗口标题和窗口文本参数总是对大小写敏感的. 1.等待窗口系列命令/函数 AHK和AU3都提供了用法类似的一组窗口等待命令/函数:WinWait/WinWaitActive/WinWaitClos ...

  5. 廖雪峰Java11多线程编程-2线程同步-4wait和notify

    wait和notify synchronized解决了多线程竞争的问题 我们可以在synchronized块中安全的对一个变量进行修改,但是它没有解决多线程协调的问题. 例如设计一个TaskQueue ...

  6. js 数据绑定

    //   回流:(重排 reflow) 当HTML的DOM结构(删除.增加.位置等)发生改变时引起DOM回流.浏览器重新计算DOM结构,重新的对当前DOM结构进行渲染 //   重绘:某一个元素的部分 ...

  7. [洛谷P2472] [SCOI2007]蜥蜴

    题目链接: 蜥蜴 题目分析: 一道网络流,先来分析一下问题: 在一个\(r*c\)的图中分布了一些数,其他地方都用\(0\)填充,我们分别从指定的一些数出发,每次可以移动到周围距离为\(d\)以内的数 ...

  8. iOS开发本地推送

    1.简介 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知. 2.创建UILocalNot ...

  9. 数据库备份还原——mysqlbackup与mysqldump对比测试

    1      环境描述 1.1      硬件环境 服务器类型:华为RH5885 IP: 10.148.128.100 内存: 64G 物理CPU个数:4 CPU核数:8 逻辑CPU个数:64 Int ...

  10. freemarker 嵌套循环 (导出word时,修改ftl模板)

    1.循环 (循环输出reportList列表的每行的姓名) <#list reportList as report> ${report.name} </$list> 2.嵌套循 ...