什么是session串的问题

 什么是session串的问题
典型案例:现有一Web系统,用用户A登录,打开修改页面Page1,然后通过菜单文件-》新窗口打开一个窗口,用用户B登录,然后回Page1页面提交,此时身份已经变为用户B,出现非希望的结果。这就是session串的问题。


如何解决Session串的问题
解决Session串的问题需要使用URL重写的技术,下面介绍一下什么是URL重写

什么是URL重写
    URL重写包括向URL路径添加一些容器可以解释的数据。规范要求会话ID必须编码在URL路径中,参数名称必须是jsessionid,例如: http://www.ss.com/catalog/index.html;jsessionid=1111,只有在你确定用户浏览器会把COOKIE停用的情况下才应使用URL重写,因为在这种情况下,WEB APP中的所有HYBERLINKS和FORM的ACTION  URL都要使用URL重写,这样就引入一个问题就是APP中所有的页面必须是动态的页面,不能存在静态的HTML页面了,因为每个页面在往服务器发送请求的时候都要在URL上带上JSESSIONID。所有页面都用SERVLET来处理的话速度就可能变慢了。
WebLogic默认打开URL重写功能,但是这是有个前提的,要求用HttpServletResponse.encodeURL()方法来包装url,如
out.println(" <a href=/"/myshop/catalog.jsp/">catalog </a>");
必需写成
out.println(" <a href=/""+response.encodeURL("myshop/catalog.jsp")+/">catalog </a>");
HttpServletResponse.encodeURL()方法检测客户端Cookie是否被禁用,如果禁用则会自动将session id加到URL中,如果没有禁用则不会添加。


具体解决方法
1.将现有系统的连接采用response.encodeURL的方式包装(工作量很大,包括href连接和js组装的连接)
2.添加一个Filter,包装HttpServletResponseWrapper,使得无论如何HttpServletResponse.encodeURL()方法都添加一个参数sid_token(值为session id)。如果是Form,则自动修改表单,添加一个隐藏字段sid_token(值为session id),同时在Filter的doFilter方法中添加一个逻辑,检查参数sid_token的值是否和当前的sesssion id一致,如果不一致则抛出异常,表示该用户已经退出系统。



注:1.Filter是否需要自动修改表单未经考证
        2.本来想采用标准的jsessionid,但是和CAS配合时发生问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值