如何在Laravel中获取会话ID?

56

我想在Laravel 4中获取会话的ID。

在Laravel 3中,这有点繁琐,但是可以使用以下代码实现:

$session_id = Session::$instance->session['id'];

但是我无法在Laravel 4中解决它...引用Session::$instance对象会抛出错误:

访问未声明的静态属性:Illuminate\Support\Facades\Session::$instance

我已经尝试过:

$session_id = Session::get('id');

但是没有用... 有什么想法吗?

4个回答

107

根据 Laravel 的版本而定:

Laravel 3:

$session_id = $_COOKIE["laravel_session"];

Laravel 4.0:

只是不包括版本4.1及以上版本:

$session_id = session_id(); //thanks Phill Sparks

Laravel 4.1(及以后版本):

$session_id = Session::getId();
或者
$session_id = session()->getId()

Laravel不再直接使用内置的PHP会话(session),因为开发人员可以选择使用各种驱动程序来管理访问者的会话(Laravel 4.2Laravel 5.1Laravel 5.2)。

因此,现在我们必须使用 Laravel 的 Session 门面(facade)或 session() 助手(helper) 来获取会话的ID:


1
我正在分析L4以找到更好的解决方案。别关掉它! :-) L4的问题在于缺乏API文档。 - Sébastien Renauld
如果您能够访问Session内部的存储驱动程序,它将实现Symfony会话接口 - 因此应该具有getId()方法。 - Sébastien Renauld
这个回复给了我这样的印象,即使是在更新版本的 Laravel 4 中,你仍然可以使用 session_id()。但事实证明,现在你必须使用Session :: getId(),因为 Laravel 不再使用标准的 PHP 会话。 - orrd

47

因为上面的回答对我来说不起作用(Laravel 4.1),所以我自己进行了一点搜索...

我不得不使用这个:

Session::getId();

5

在 Laravel 5.5 中,首先在您的控制器中编写以下代码:use Session;然后在您的控制器函数内编写以下代码:session()->getId();


17
因为你使用全局助手函数session(),所以并不真正需要使用门面模式。 - jartaud

1

关于 Laravel 9:

$sessionId = session()->getId();

或者

$sessionId = Session::getId();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接