28 三月, 2007

php: 如何去除URL中的SESSION ID

php.ini有一个参数session.use_trans_sid,用来控制在客户端禁止cookie的时候是否自动重写url从而达到支持session的目的。URL重写的规则是由另外一个参数"url_rewriter.tags"设定的,缺省值为"a=href,area=href,frame=src,input=src,form=fakeentry,fieldset="。

问题来了,当用户打开第一个php页面,后台的php模块接到请求,创建了一个新的session(session_start),但是它在这个时候却无法得知客户端是否支持cookie。如果,系统的session.use_trans_sid是打开(1)的,那么php会重写所有url,将类似"PHPSESSID=93d5b29abebbd31a8cc53e2ac691abcf"字样的session id信息以参数形式记录在url中。

解决办法:

没有完美的解决方案,既然不希望php擅自修改url,那么只有放弃基于url的session实现机制,也就是放弃那些不支持cookie的用户。

设置session.use_trans_sid=0,或者设置url_rewriter.tags=""都可以达到去除url中恼人的PHPSESSID。url_rewriter.tags,可以使用ini_set动态设置,但是session.use_trans_sid不可以动态修改,这似乎和php的版本有关。如果Apache支持,那么修改.htaccess文件,也是可以的


最新回复
发表评论


















Bold Italic Link