ThinkPHP URL自己带上参数PHPSESSID

碰到个问题,ThinkPHP项目程序本地测试没问题,传到服务器后第一次访问,页面的所有URL会自己带上类似?PHPSESSID=28954583914413546c6e881cfa7c8117 这样的参数,再点击刷新下页面后访问才正常。

浏览器并没有禁止cookie,本地访问正常也证实了这点,第一猜想是服务器的环境配置与项目代码某些地方冲突所影响。

检测了服务器的关于cookie的配置对比本地的,发现session.use_trans_sid这个项的配值是不同的,本地关闭,服务器是开着的。

PHP中的会话在默认情况下是使用客户端的cookie来保存session_id的,所以当客户端的cookie出现问题的时候就会影响会话了。其实会话不一定必须依赖cookie,当客户端的cookie被禁用或出现问题时,PHP会自动把session_id附加在URL中,这样再通过 session_id就能跨页使用会话变量了。但这种自动的附加也是有一定条件的,首先,在php.ini文件中的session.use_trans_sid = 1或者编译时打开了--enable-trans-sid选项,其次,运行PHP的服务器必须是UNIX/Linux系统,Windows操作系统不具备此项功能。

上面的引用就说明了这点,在linux系统下,在session.use_trans_sid开启的时候,导致项目会自己加上PHPSESSID参数来达到跨页会话。

最后解决是:ini_set('session.use_trans_sid', 0);
//在项目代码初始化的位置加入这句

其实还有个怀疑,可能项目某配置出现问题。待查。

Ps,这问题也反面教了件事,在处理跨页会话跨域会话的时候,session.use_trans_sid或许能起到奇效。

php WebSockets服务端和客户端

关于WebSockets 的基础概念参见:HTML5 WebSockets 基础使用学习教程

本文简单记录PHP利用WebSockets
和HTML5 WebSockets API的服务器推技术来实现在线聊天系统

php WebSockets服务端和客户端Demo下载

解压后只有两个文件:server.php(服务端)和client.html(客户端)

运行WebSockets服务器端

,命令行模式下使用php -q path\server.php
运行

,或者浏览器访问server.php

注:浏览器必须支持HTML5的WebSocket
。可使用当前的最新Firefox或Chrome。

另外PHP需要支持php_sockets组件
。windows环境下请将php.ini的php_sockets.dll打开。

以上条件满足后,打开http://domo.cn/WebSockets/client.html

如果出现图中提示:

PHP websockets error

这情况为server.php端未运行。可以另开个窗口:http://demo.cn/WebSockets/server.php

当出现提示:Message: Created socket Resource id #2 Message: Socket bound to localhost:8000 Message: Start listening on Socket.,此时表示WebSockets服务端运行中。

再次访问http://domo.cn/WebSockets/client.html,

PHP websockets 连接成功

此时客户端和服务器端WebSockets连接成功。

发送测试内容: PHP WebSockets Test

PHP WebSockets服务器主动 返回发送内容

PHP websockets exit

点击退出,客户端即与服务器端断开。

这样就利用PHP的sockets和HTML5的WebSockets API简单的实现了服务器推。