1.session是同一浏览器共享的.
但是同一浏览器同一PC他们的session是不一样的..
所以也就不是共享的.
但是如果你在同一台机器上,并且是 同意浏览器
你登录两个用户.? 用session保存用户对象。
后面的一个会把前面一个冲掉
例如
public class Order { private String user; private String password; public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Order order = new Order(); HttpSession hs = request.getSession(); hs.invalidate(); String user = request.getParameter("user"); String password =request.getParameter("password"); order.setUser(user); order.setPassword(password); hs.setAttribute(user, order); response.sendRedirect("wel.jsp"); }
你用session保存对象的时候就会冲掉前面的对象
当你刷新前面登录的页面的时候就会编程第二个登录用户的信息
那我们如何做到同意浏览器,同一PC机.登录两个用户呢.
我们可以根据唯一标识符,或者用户名传递的方式,确定登录的是不同的用户.
因为这样session里面保存的是不同的值,通过转发传递唯一用户名,来取相应的对象.
但是这样做性能并不好,因为如果有成千上万的客户登录,那岂不是session里面要保存成千上万个属性值
所以不可取,
很纠结的问题
修改后的代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Order order = new Order(); HttpSession hs = request.getSession(); hs.invalidate(); String user = request.getParameter("user"); String password =request.getParameter("password"); order.setUser(user); order.setPassword(password); hs.setAttribute(user, order); response.sendRedirect("wel.jsp?u="+user); }
然后我们在用用户的时候
就可以通过过来的唯一标识符(或用户名)来从session中获取相应的对象了
记住,你每次跳转页面操作的时候,都需要传递,因为要从session中获取相应的对象
代码如下:
<% String u = request.getParameter("u"); HttpSession hs = request.getSession(); Order order = (Order)hs.getAttribute(u); out.println("user="+order.getUser()); out.println("password="+order.getPassword()); %>
.