我正在尝试将Laravels身份验证与许多简单的HTML / Javascript应用程序一起使用。
我认为理想的工作方式是这样的:
我的问题是检查用户是否已在PHP脚本中登录。Laravels会话在那里不可用(并共享它,session_start()
并且$_SESSION["auth"] = true
只会将该变量添加到本机PHP会话的Laravels版本中)。
这些是我的设置 app/config/session.php
return array(
'driver' => 'native',
'lifetime' => 120,
'files' => storage_path().'/sessions',
'connection' => null,
'table' => 'sessions',
'lottery' => array(2, 100),
'cookie' => 'laravel_session',
'path' => null,
'domain' => null,
);
我将路径更改为null
因为要在整个域上使用会话。
我附带的PHP脚本非常简单,看起来像这样:
session_start();
if($_SESSION['authenticated']){
echo "logged_in";
} else {
header("Location: laravel/login/url");
}
您可能想知道为什么我不仅仅将应用程序包含在Laravels框架中,这是因为这个简单的HTML应用程序大约有100个不同的版本,散布在10个域名中,而现在每个域名都有自己的名称(非常古老且不安全)登录脚本(每次创建新域时都会复制)。因此,我想使用Laravel将其集中于一个数据库和一个管理系统。
希望这里的人知道如何解决此问题或解决它(也许我应该尝试在我的PHP脚本中使用Laravels会话包?)。
Laravel使用存储驱动程序进行会话管理-意味着试图通过PHP $ _SESSION变量访问其内容将永远无法工作。您的配置将默认会话驱动程序设置为“本机”(我认为),即文件会话驱动程序,这意味着所有会话数据都存储在app / storage / sessions中(我相信它以类似JSON的结构存储会话数据)。您可以在此处阅读有关会话驱动程序的更多信息。
因此,要回答您的问题,有两种方法可以解决此问题。我可能要做的是实现一个简单的自定义会话界面,该界面将仅检查用户是否已登录。您可以通过laravel表单对用户进行身份验证时,将用户的会话设置为已登录。例如:
if (Auth::attempt(array('email' => $email, 'password' => $password))) {
// Set your user's session to logged in here. You will have to implement some
// system to do so, the below code is INSECURE/NOT USEABLE
$_SESSION['user'] = $email;
}
然后,当用户注销时,您将执行相反的操作。如上所述,由于多种原因,简单地将用户的会话设置为登录是非常不安全的,最明显的是会话劫持。(这是在该主题上的出色读物)如果您可以实施一个安全的会话管理系统(实际上,它应该不难,而且要轻巧),那么我认为这种策略是您最好的选择。
另一种方法是尝试将cookie用作会话驱动程序,但是这样做会增加更多的复杂性和乱码,因为您首先必须从一个cookie中获取Laravel会话id,然后使用它来读取另一个cookie ...这不是一个优雅的解决方案。
因此,我建议使用我谈论的第一种方法并实现一个简单且安全的会话管理系统。希望这对您有所帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句