我安装了 Laravel 4.0 并得到了这个错误
ErrorException SessionHandler::read(): 会话id过长或包含非法字符,有效字符为az、AZ、0-9和'-,' return (bool) $this->handler->close(); } /** * {@inheritdoc} / public function read($id) { return (string) $this->handler->read($id); } / *
我安装了 Laravel 4.0 并得到了这个错误
ErrorException SessionHandler::read(): 会话id过长或包含非法字符,有效字符为az、AZ、0-9和'-,' return (bool) $this->handler->close(); } /** * {@inheritdoc} / public function read($id) { return (string) $this->handler->read($id); } / *
你在同一台机器上安装了 Laravel 3 吗?默认情况下,Laravel 4 使用相同的会话 cookie 名称(与 Laravel 3 相同),现在可以在 /app/config/session.php 文件中找到。简单地改变:
'cookie' => 'laravel_session',
到,例如
'cookie' => 'laravel_session_4',
并刷新浏览器。现在一切都应该工作了。
可能是您的 cookie 损坏。尝试清除浏览器中的 cookie。
看看这个讨论:https ://stackoverflow.com/a/16318456/1563189
尤其:
你如何首先在 PHPSESSID 中得到非法字符?它们不是由 PHP 自动生成的吗?– 2010 年
Lèse majesté
7 月 6 日 11:57它们是,但是将您链接到生成的会话 ID 的 cookie 是客户端。如果该 cookie 更改为无效格式(有人试图利用某些东西),PHP 会注意到它。– 2011 年
Aleksey Korzun
9 月 6 日 19:56
这个问题有一个错误报告(https://bugs.php.net/bug.php?id=68063)
您可以检查 session_start 的成功并在需要时生成 id:
$ok = @session_start();
if(!$ok){
session_regenerate_id(true); // replace the Session ID
session_start();
}