查看“ThinkPHP”的源代码
←
ThinkPHP
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看并复制此页面的源代码:
=相关链接= * [http://doc.thinkphp.cn ThinkPHP文档中心] * [http://www.tuicool.com/articles/qmA32q2 Laravel兼容原生PHP session] =安装= 获取项目代码,把定文件夹根目录为站点根目录就可以了,不要设置任何东西,就能显示欢迎页。 <source lang='text'> location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } } </source> =路由= http://thinkphp.example.com/?a=db_test 试了一下URL_MODEL的几个取值,貌似无效,先使用上面的格式来访问控制器。 =把session写入数据库= 1、改配置文件 <source lang='php'> 'SESSION_OPTIONS' => array( 'type' => 'Mysqli',//session采用数据库保存 'expire' => 1440,//session过期时间,如果不设就是php.ini中设置的默认值 ), 'SESSION_TABLE' => 'wp_session', //必须设置成这样,如果不加前缀就找不到数据表,这个需要注意 </source> 仅配置这个就可以了。type最初设置为db,页面报错用不了,用Mysqli就可以了。 2、建数据表 <source lang='SQL'> CREATE TABLE `wp_session` ( `session_id` varchar(255) NOT NULL, `session_expire` int(11) NOT NULL, `session_data` blob, UNIQUE KEY `session_id` (`session_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 </source> =ThinkPHP读取Laravel的Session数据= ==两个框架对session数据处理的差异== ;ThinkPHP <source lang='php'> //仅系列化,一道手续存储。 session.serialize_handle=php //使用ini_set()改变系列化方式不成功,改为修改php.ini文件。 ini_set("session.serialize_handle", "php_serialize"); </source> ;Laravel <source lang='php'> //先系列化,然后再base64编码存储。 session.serialize_handle=php_serialize base64_encode($data) </source> ==对ThinkPHP的改造== 为了使ThinkPHP正确读取写Laravel的session数据,把ThinkPHP\Library\Think\Session\Driver\Mysqli.class.php复制一份,命名为LaravelDB.class.php,改一下read()、write()两个方法。 <source lang='php'> public function read($sessID) { $hander = is_array($this->hander) ? $this->hander[1] : $this->hander; //fixme 过期时间与Laravel不同,先去掉不用。 //$res = mysqli_query($hander, "SELECT session_data AS data FROM " . $this->sessionTable . " WHERE id = '$sessID' AND session_expire >" . time()); $res = mysqli_query($hander, "SELECT payload AS data FROM " . $this->sessionTable . " WHERE id = '$sessID' "); if ($res) { $row = mysqli_fetch_assoc($res); return base64_decode($row['data']); //for laravel } return ""; } public function write($sessID, $sessDataRaw) { $sessData = base64_encode($sessDataRaw); //for Laravel $hander = is_array($this->hander) ? $this->hander[0] : $this->hander; $expire = time() + $this->lifeTime; mysqli_query($hander, "REPLACE INTO " . $this->sessionTable . " (id, last_activity, payload) VALUES( '$sessID', '$expire', '$sessData')"); if (mysqli_affected_rows($hander)) return true; return false; } </source>
返回
ThinkPHP
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息