繁体   English   中英

Cakephp 2.x会话即将过期

[英]Cakephp 2.x Session expire very soon

在会话到期时间之前在“我的站点”用户上注销。 我目前正在使用Cakephp 2.8。 它在本地有效,但在服务器上无效。 我将网站托管在BigRock上,我非常努力,以至于找不到背后的原因。

在config / code.php中

Configure::write('Session', array(
    'defaults' => 'php',
    'timeout' => 43200 // 30 days
));

下面是Chrome Cookie存储快照 在此处输入图片说明

由于服务器使用了负载平衡,因此我遇到了同样的问题。 更改主机时,会话丢失。 您是否已经联系BigRock?

您可以将会话放入数据库或redis / memcached中以解决此问题。

由于负载平衡器将请求路由到不同的服务器,并且服务器被配置为将会话数据以本地存储/缓存机制存储到单个服务器,所以发生了他的问题。

当服务器接收到具有由其他服务器分配的会话ID的请求时,它将无法识别该会话ID,因为它在其本地会话存储/缓存中丢失。 因此,它将发送401 - Unauthorized标头供客户端重新认证。

解决方案可以分两层实现:

  • 在网络层中,通过在负载均衡器中配置“粘性会话”。
  • 在应用程序层中,通过配置会话存储以在不同的应用程序服务器之间共享(例如,@ 50ShardsOfGray建议使用redis / memcached缓存或数据库来拥有共享的会话存储)。

这两种解决方案都有其优点和缺点,主要缺点是缺乏灵活性。 这是微服务架构仅将jwt令牌用于身份验证和授权的原因之一。

恕我直言,您决定实施哪一层取决于实施变更的性能和工作量要求。 如我所见,您可以轻松地更改应用程序配置以将会话存储在数据库中(尽管更喜欢使用缓存),但是肯定会对性能造成影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM