Laravel会话在本机PHP中不可用?

时间:2013-01-20 20:13:24

标签: php laravel

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

例如,假设我设置了会话变量,如下所示:Session::put('isAuthorized', 'yes') - 我可以使用Session::get('isAuthorized')在Laravel上下文中检索这一点,但以下PHP不会检索此会话密钥 - < / p>

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

返回

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

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

4 个答案:

答案 0 :(得分: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会话将是相同的&#34;。

答案 1 :(得分:4)

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

  

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

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

默认存储驱动程序是Cookie,请尝试以下操作:

print_r($_COOKIE);

答案 2 :(得分:3)

请注意,此答案仅适用于Laravel 3

Laravel不使用PHP会话,因此请忘记session_start()$_SESSION等。

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

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

要实现您希望实现的目标 - 也就是说,确定当前人员是否获得授权,最好在您的应用程序中构建API并保护它以便只能由localhost访问。从性能的角度来看,这不是一个很好的解决方案,但可能更优雅,因为你不是在讨论Laravel会话管理的内部。

答案 3 :(得分:1)

Laravel中的会话处理确实与本机PHP会话不同。要使用本机PHP会话,请将值设置如下:

<?php
    session_start();

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

    echo $_SESSION['isAuthorized']; // output yes
?>