版權聲明:本文爲博主原創文章,未經博主容許不得轉載。 https://blog.csdn.net/b2084005/article/details/30222735
一、要求html
在使用struts1開發JavaWeb項目中,要求超級管理員登陸進入以後,展現普通用戶列表,在普通用戶列表中添加管理用戶按鈕,點擊後,在瀏覽器中另外彈出一個標籤頁,並且該標籤頁是選中的普通用戶登陸後的界面。java
二、產生問題瀏覽器
a、點擊普通用戶登陸後,session中的用戶信息已經變爲了該用戶的信息了,若是再次刷新超級管理員登陸的界面,此時,界面就變爲選中的普通用戶登陸的界面了。服務器
b、同一個系統,在同一瀏覽器中的session的ID是相同的,此sessionID是服務器建立session產生的,沒法在客戶端修改sessionid,若想修改sessionid,得從服務器端修改(沒試過)。session
三、解決辦法app
a、生成一個不重複的值,我取名爲siddom
例、Random random = new Random(); jsp
StringBuffer sid = new StringBuffer(); ui
sid = sid.append(System.currentTimeMillis()); //取系統時間 .net
// 加上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和