2012-09-05 22 views

回答

2

您需要將會話存儲在數據庫中。你可以將它們存儲在Postgres中,或者像Redis一樣。這些將在部署期間持續。

+2

+1的解決方案。我將介紹「爲什麼」:Heroku應用程序使用[臨時文件系統](https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem)。當你推送到Heroku時,它需要你推送的內容並創建一個「slug」 - 這個slug是旋轉你的應用程序實例的來源。當你再次推動時,會產生一個新的slu and,並創建新的實例。這就是爲什麼你會丟失會話 - 在部署之間沒有任何生成的服務器端持續存在。根據MemCachier的文檔(https://devcenter.heroku.com/articles/memcachier#php)的 – redhotvengeance

3

未提及的另一個選項是使用Memcached來存儲會話。你可以使用heroku addon Memcachier(https://addons.heroku.com/memcachier)。

要配置php以使用memcached會話處理程序,請參閱擴展的手冊http://php.net/manual/en/memcached.sessions.php。基本上你設置了php.ini指令:

session.save_handler = memcached 
session.save_path = "localhost:11211" 

將save_path替換爲安裝附件時給出的Memcachier地址和端口。

+0

,memcached目前不支持SASL認證,不能與MemCachier一起使用。 – howanghk

+0

@Owen你是正確的,php-memcached不支持會話的SASL(從2.0版開始,它在通常的客戶端上支持它,看看https://github.com/php-memcached-dev/php-memcached /blob/master/php_memcached.c#L2405)。 我在會話處理程序中也打開了支持SASL的問題請求。 https://github.com/php-memcached-dev/php-memcached/issues/47 –

+0

希望他們會很快爲會話處理程序添加SASL支持:)順便說一下,我發現這個:https://addons.heroku。 com/memcache,但因爲它是聖誕節,我沒有時間弄清楚它是否可以用於此目的。 – howanghk

1

我使用AppFog,Memcachier現在支持SASL,但我不知道如何繼續。

 
session.save_handler = memcached
session.save_path = "localhost: 11211"

現在所缺少的是認證,我不知道如何把它 我發現了這一點,但我不知道這是否會工作,以及如何使用
http://php.net/manual/en/memcached.setsaslauthdata.php
PD:我不可以在appfog中訪問php.ini,所以我需要通過htaccess來做到這一點,你能給我一個例子如何在htaccess中做到這一點?
https://docs.appfog.com/languages/php#php_ini
感謝