Ana*_*nam 6 php laravel laravel-4
我目前正在开发一个应用程序,我必须使用几页SSL.例如,登录,注册页面.然而,当协议之间进行切换https来http,Laravel会话不被传输通过HTTP.
是否有任何解决方案,Laravel将保留两个协议的会话.
默认情况下,Laravel 为身份验证和会话 cookie 设置 secure 和/或 httponly。我找不到在配置中更改此设置的方法,事实上在 Laravel 4.0 中(不再是这种情况),httponly 被硬编码为设置vendor/laravel/framework/src/Illuminate/Session/SessionManager.php
请注意,您不应将 cookie 从 HTTPS 泄漏到 HTTP,因为这会阻止您确保会话安全(例如,我仍然可以嗅探网络上登录到您网站的其他用户的会话)。
编辑app/config/session.php。'secure'如果您希望在 https 上设置的 cookie 也能在 http 上读取,请将密钥更改为 false。
或者,遵循 @martinstoeckli 的建议并根据您的环境的值设置密钥。
也许实现这一点的最佳方法是用CookieSessionHandler您自己的处理程序替换。
例如,可以创建一个新类,该类将使用更新的写入函数扩展 CookieSessionHandler,该写入函数会将所有 cookie 标记为不仅仅适用于 https/http。
Class NewCookieSessionHandler extends CookieSessionHandler implements \SessionHandlerInterface {
/**
* {@inheritDoc}
*/
public function write($sessionId, $data)
{
// $this->cookie is \Illuminate\Cookie\CookieJar
$this->setCookie($this->cookie->make($sessionId, $data, $this->minutes, '/', false, false));
}
/**
* Set the given cookie in the headers.
*
* @param \Symfony\Component\HttpFoundation\Cookie $cookie
* @return void
*/
protected function setCookie($cookie)
{
if (headers_sent()) return;
setcookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), false, false);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在里面app/config/session.php你可以将驱动程序更改为NewCookie
最后在里面app/start/global.php注册新的 cookie 驱动程序来覆盖 cookie 的设置
use Illuminate\Cache\Repository;
Cookie::extend('NewCookie', function($app)
{
return new NewCookieSessionHandler;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2110 次 |
| 最近记录: |