2012-05-23 147 views
0

我寫了一個使用php會話的php web應用程序。當我在Android手機上試用它時,事實證明,瀏覽器沒有保留會話cookie。 我煮下來到這個超級短的測試腳本:PHP會話cookie未保存在android上

<?php 
session_start(); 
var_dump($_COOKIE); 
?> 

,因爲我可以看到它在其他瀏覽器中預期的行爲是: 在我們看到的第一個電話:

array(0) { } 

在第二後續調用,我們看到:

array(1) { ["PHPSESSID"]=> string(32) "8f08c514a5c15c36309e9a435ebcc8ec" } 

在Android手機,$_COOKIE陣列但保持爲空,我也得到ŧ他首先回應(array(0) { })。

我檢查了設置並啓用了cookie。另外其他網站(不是我寫的)需要登錄才能正常工作。 我也嘗試清除所有cookie和緩存以防萬一,但它沒有改變任何東西。

編輯:爲了澄清,session_start()應該設置sesssion cookie,它實際上使用桌面pc上的Firefox工作。我也看了一下http header,發現

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Set-Cookie: PHPSESSID=a270cbe1b57ba089c1eedacd8344e871; path=/ 

所以cookie肯定會被設置。當然,除非在服務Android瀏覽器時PHP做了不同的事情。

這是一個已知的問題還是我錯過了明顯的東西?是否有解決方法?

+0

同樣的問題,你確定你」用你的測試腳本重新設置cookie?您似乎沒有在您發佈的短文稿中設置任何內容。 –

+0

您必須先將數據添加到cookie,然後嘗試var_dump – xeonarno

+1

session_start()應該自動設置會話cookie。這是使用Firefox瀏覽器觀察到的。 – kaymes

回答

0

我意識到這是一個老問題,但我剛剛遇到同樣的問題,無法在StackOverflow或Google的任何地方找到答案,所以我想我會分享我的解決方案。

如果您不使用子域,某些瀏覽器(主要是移動設備)將插入「www」。例如,如果您的網站是example.com,瀏覽器會將其更改爲www.example.com。

如果您的會話是在example.com上設置的,那也是會話cookie的設置,並且它在www.example.com上不會被識別。我知道解決這個問題 最簡單的方法是以下行添加到您的.htaccess文件:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\.(.+) 
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+) 
RewriteRule^http%2://%3%{REQUEST_URI} [L,R=301] 

希望這會幫助別人用:-)