我使用PHP來製作一個Heroku FB應用程序,並且每當我做一個git push時,我的用戶會話就會被銷燬。爲什麼會發生這種情況?更重要的是,我怎樣才能防止這種情況發生?我如何在部署到Heroku時保留會話?
回答
您需要將會話存儲在數據庫中。你可以將它們存儲在Postgres中,或者像Redis一樣。這些將在部署期間持續。
未提及的另一個選項是使用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地址和端口。
,memcached目前不支持SASL認證,不能與MemCachier一起使用。 – howanghk
@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 –
希望他們會很快爲會話處理程序添加SASL支持:)順便說一下,我發現這個:https://addons.heroku。 com/memcache,但因爲它是聖誕節,我沒有時間弄清楚它是否可以用於此目的。 – howanghk
我使用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
感謝
- 1. .NET MVC在部署時保留會話
- 2. 在Laravel 5 Capistrano部署期間保留文件會話
- 3. 會話變量禁用Heroku部署(Rails)
- 4. 部署到Heroku時出錯
- 5. 部署到Heroku時失敗
- 6. 部署到heroku時出錯
- 7. 部署到Heroku時失敗
- 8. 部署到Heroku
- 9. 如何在保留會話狀態的同時將MVC綁定到IIS上部署的Web窗體?
- 10. 會話超時後,我們可以保留會話嗎?
- 11. 如何重定向到https時保留PHP會話變量
- 12. Navbar在部署到heroku時關閉
- 13. 如何保留我在Azure機器上的部署?
- 14. 在HttpClient中保留會話
- 15. 部署到Heroku的
- 16. 部署Geddy到Heroku
- 17. Nodej.s部署到Heroku
- 18. 每次我部署到heroku我得到一個超時錯誤
- 19. 部署在heroku上的機架/ Sinatra會話中斷 - E13
- 20. 在heroku上重新部署應用程序PHP會話消失
- 21. 如何將HTML部署到heroku?
- 22. 如何將meanjs部署到heroku
- 23. 如何將舊提交部署到Heroku
- 24. 如何將npm項目部署到Heroku?
- 25. 如何將.war部署到heroku
- 26. 如何在部署到Heroku時中止芹菜任務
- 27. Grails 3會話超時在部署到Tomcat時不起作用
- 28. Magento不會在前端保留會話
- 29. HTTP會話超時後保留狀態
- 30. 將jekyll部署到heroku時出錯?
+1的解決方案。我將介紹「爲什麼」:Heroku應用程序使用[臨時文件系統](https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem)。當你推送到Heroku時,它需要你推送的內容並創建一個「slug」 - 這個slug是旋轉你的應用程序實例的來源。當你再次推動時,會產生一個新的slu and,並創建新的實例。這就是爲什麼你會丟失會話 - 在部署之間沒有任何生成的服務器端持續存在。根據MemCachier的文檔(https://devcenter.heroku.com/articles/memcachier#php)的 – redhotvengeance