4

Laravel 新手,在使用 Sessions 时遇到了一些问题。具体来说,从 Laravel 之外的 PHP 文件中读取会话数据。

例如,假设我像这样设置会话变量:Session::put('isAuthorized', 'yes')- 我可以在 Laravel 上下文中很好地检索它,Session::get('isAuthorized')但以下 PHP 不会检索此会话密钥 -

<?php
session_start();
echo $_SESSION['isAuthorized'];
?>

返回

Notice: Undefined index: isAuthorized in C:\xampp\htdocs\session.php on line 3

我尝试将 Laravel 会话驱动程序设置为默认cookiefile模式,结果相同。

4

4 回答 4

8

您还可以编写一个会话适配器,因此该$_SESSION变量将是它的一个实例:

<?php 
class SessionAdapter implements \ArrayAccess {

  public function offsetExists($offset) {
      return Session::has($offset);
  }

  public function offsetGet($offset) {
      return Session::get($offset);
  }

  public function offsetSet($offset, $value) {
      return Session::put($offset, $value);
  }

  public function offsetUnset($offset) {
      return Session::forget($offset);
  }

}

然后在你的代码中的某个地方:

<?php 
$_SESSION = new SessionAdapter();
// or
$GLOBALS['_SESSION'] = new SessionAdapter();

这样原生 PHP 会话和 Laravel 会话将是“相同的”。

于 2014-03-12T12:54:17.037 回答
4

Laravel 为其会话使用存储驱动程序,即 cookie、文件、数据库、内存、memcached 和 redis(以及 Laravel 4 中的 APC)。

网络是一个无状态的环境。这意味着对您的应用程序的每个请求都被认为与之前的任何请求无关。但是,会话允许您为应用程序的每个访问者存储任意数据。每个访问者的会话数据存储在您的网络服务器上,而包含会话 ID 的 cookie 存储在访问者的机器上。此 cookie 允许您的应用程序“记住”该用户的会话,并在对您的应用程序的后续请求中检索他们的会话数据。

http://laravel.com/docs/session/config

默认存储驱动程序是 Cookie,所以试试这个:

print_r($_COOKIE);
于 2013-01-20T20:39:53.173 回答
3

请注意,此答案特定于 Laravel 3

Laravel 不使用 PHP 会话,所以忘记session_start(),$_SESSION等。

如果您使用文件会话驱动程序运行,则会话数据存储在 storage/sessions 中的文件中。您可以通过从 cookie 中读取 Laravel 会话 ID 来获取文件的名称。因此,解决您的问题的 hacky 方法是编写一些从 cookie 获取会话 ID 的代码,然后在 storage/sessions 文件夹中查找具有该名称的文件,读入该文件,json_decode()然后您就可以阅读整个事物。

如果您使用 cookie 会话驱动程序运行,则所有会话数据都存储在 cookie 中,但它是加密的,因此您必须拥有密钥的副本(应该在 application/config/application.php ) 然后找出 Laravel 使用的加密方法,以便您可以解密它。然后您可以读取所有会话变量。

要实现您希望实现的目标 - 即确定当前人员是否已获得授权,最好将 API 构建到您的应用程序中并对其进行保护,以便只能由 localhost 访问。从性能的角度来看,这不是一个很好的解决方案,但可能更优雅,因为您没有在 Laravel 会话管理的内部进行修改。

于 2013-03-22T09:56:29.067 回答
1

Session handling in Laravel is indeed different from native PHP session. To use native PHP session, set the value as below:

<?php
    session_start();

    $_SESSION['isAuthorized'] = 'yes';

    echo $_SESSION['isAuthorized']; // output yes
?>
于 2013-03-22T07:46:11.133 回答