4

applet引起的session失效

Posted in Java, PHP at 八月 16th, 2010 / 4 Comments »

最近在把一个项目改成ThinkPHP的框架,其中有一个功能是用户登录后调用一个applet,applet的调用代码如下:

 <applet code="nn.pp.rc.rac.class"
     archive="/2591/rc.jar,/2591/rcbd.jar"
     alt="Browser has no Java!"
     width="300" height="80" 
      >
......

在旧的程序中没有问题,ThinkPHP框架的程序在IE6下会有问题:一旦调用了这个applet,会话就过期,用户要重新登录。

抓包分析发现调用这个applet后session_id发生了变化,跟踪到session_id变化的地方,发现有一个请求是


http://192.168.1.10/app/index.php/Service/index/key/fdsfs0aa455/nn/pp/rcbd/Key4pc_zh_CN.class

这应该是applet执行的时候,java去读取了这个class。可问题是这个请求并没有带上浏览器的cookie,请求中的phpsession是空的。然后又是通过了ThinkPHP去访问的,所以会重新生成一个phpsession传回来。我想不通的是,既然这个请求没有带己经有的cookie,那为什么会把服务器发的cookie存到浏览器呢?这个新cookie覆盖了原来的cookie,所以现在的session_id是未经过验证的,用户下一次操作的时候,就会提示重新登录。

问题是找到了,可怎么解决却是个头疼的事。怎么样阻止客户端去访问这个class呢?或者说让客户端去访问正确的class地址?阻止好像不现实,这个applet不是我们公司开发的,不好去改。让客户端去访问正确的class地址也没办法做到,因为这个class文件在服务器上是不存在的,我也测试过了几个地址,都是返回404。

实在没办法了,再回过头来看旧程序是怎么回事。又对旧程序抓包,找到访问class的地方,发现全是404。这才明白访问这些class根本没意义。然后把class的地址改成下面的形式:

__ROOT__."nn/pp/rcbd/Key4pc_zh_CN.class";

只要这个地址不经过index.php,返回状态码就是404。测试了一下,和旧程序一样了,session_id也不会乱变了。

Published in Java, PHP

4 Responses to “applet引起的session失效”

  1. 八月 19th, 2010 at 12:55 上午 #淘宝网

    文章写的很不错,已经订阅了RSS.

  2. 八月 21st, 2010 at 2:33 上午 #问道推广员

    呵呵,有意思!

  3. 八月 30th, 2010 at 11:47 下午 #精美图片网

    赞一个!

  4. 八月 30th, 2010 at 11:58 下午 #美女图片网

    喜欢!

Leave a Reply

请输入算式结果(看不清请点击图片)
(必须)