12

我安装了 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); } / *

4

3 回答 3

44

你在同一台机器上安装了 Laravel 3 吗?默认情况下,Laravel 4 使用相同的会话 cookie 名称(与 Laravel 3 相同),现在可以在 /app/config/session.php 文件中找到。简单地改变:

'cookie' => 'laravel_session',

到,例如

'cookie' => 'laravel_session_4',

并刷新浏览器。现在一切都应该工作了。

于 2013-06-05T14:35:03.723 回答
11

可能是您的 cookie 损坏。尝试清除浏览器中的 cookie。

看看这个讨论:https ://stackoverflow.com/a/16318456/1563189

尤其:

你如何首先在 PHPSESSID 中得到非法字符?它们不是由 PHP 自动生成的吗?– 2010 年Lèse majesté7 月 6 日 11:57

它们是,但是将您链接到生成的会话 ID 的 cookie 是客户端。如果该 cookie 更改为无效格式(有人试图利用某些东西),PHP 会注意到它。– 2011 年Aleksey Korzun9 月 6 日 19:56

于 2013-05-29T18:55:06.363 回答
3

这个问题有一个错误报告(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(); 
}
于 2014-12-02T10:59:51.750 回答