Cakephp 2.x会话即将过期

时间:2019-01-07 05:46:11

标签: php cakephp-2.0

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

在config / code.php

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

以下是Chrome Cookie存储快照 enter image description here

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

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

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

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