簡體   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