2011-04-11 106 views
0

[@ downvote和白癡的言論,這是不酷的打人。我甚至在問這個問題之前,重新檢查了整整3天的文檔和coursen。 正如詹姆斯所做的那樣,關閉此功能可以防止大量白癡堆在無用的,事實上不正確的評論上。感謝Charles和Brent B非常樂於助人。 這結果讓我刪除這些標籤不是一個Safari的問題。]


$ _SESSION是沒有得到在Safari設定,因此我的多頁表格休息。 $ _POST,$ _REQUEST確實已設置(但顯然會在後續頁面上消失)。 版本爲PHP:5.3.1,Safari 5.

幫助!這是的問題與任何以下的,我檢查了所有,我讀的所有其他相關的問題:

  • 在session_start()的作品。 SID/PHPSESSID在頁面之間保留。
  • session.use_cookies = 1,session.use_only_cookies = 1
  • 我檢查的php.ini,並認爲它是確定
  • 我沒有Safari瀏覽器配置爲接受所有Cookie(現在)。沒有不同。
  • 我可以手動設置$ _SESSION ['debug']確實跨頁保留(並且會話文件被正確寫出)。除非我這樣做,否則$ _SESSION永遠不會被定義。

我沒有時間去調試這個廢話,那麼下面哪個最後一分鐘的解決方法是最不容易的? (這是一個編程任務,不是生產代碼) 根據課程筆記,$ _SESSION應該合併$ _POST,$ _REQUEST,$ _GET,session和globals吧?

  1. 手動做$ _SESSION = array_merge($ _ SESSION,$ _ POST); [這部作品]
  2. 採用隱藏式的形式重新發布$後續形式彥博
  3. 其他?

(在更廣泛的筆記,PHP應該簡單地認爲是破在Safari(5)?)

+0

您是使用完全限定的域名,IP地址還是本地主機進行測試? Safari在過去曾經接受過不是真正的域名的cookies的許多挑剔問題,儘管我認爲他們之前已經修復了這些問題。此外,'$ _GET' /'$ _POST' /'$ _REQUEST'是根據提交的數據構建的,而'$ _SESSION'則存儲在磁盤上,但在cookie中被引用。沒有會話cookie意味着你得到一個空的會話。除了在所有的首都並且以下劃線開始之外,這些超全球資產共享*沒有其他*。不要將'$ _POST'合併到'$ _SESSION'中,這很愚蠢。 – Charles 2011-04-11 06:34:36

+1

是的,從本地主機(我怎樣才能仔細檢查它看到的確切地址?是否安全?)並且**是一個會話cookie。 _session.cookie_domain_沒有任何價值。 – smci 2011-04-11 06:41:42

+0

對於娛樂價值,嘗試訪問該網站作爲'127.0.0.1',它可能會有所作爲。您的會話cookie沒有cookie域可以在這裏。另外,請查看開發人員工具中的網絡選項卡。您應該能夠點擊PHP腳本的HTTP請求並檢查發送和接收的標題。你應該看到你的PHP代碼中的Set-Cookie頭(自動完成)以及相應的Cookie標頭。 – Charles 2011-04-11 06:44:19

回答

5

$ _SESSION不合並其他超級全局數組,它是它自己的陣列。 $ _REQUEST是$ _POST和$ _GET的合併,但就是這樣。從你所描述的,$ _SESSION工作正常。閱讀官方手冊。 http://www.php.net/manual/en/language.variables.superglobals.php

+0

好吧,我的錯。但是,在多頁表單上,那麼可以爲單頁表單通常使用$ _POST數組的每個變量聲明一個$ _SESSION變量嗎? (顯然它可以在這個代碼中工作,但是在創建幾個$ _SESSION變量時有什麼缺點嗎?) – smci 2011-04-11 08:17:18

+0

(我對$ _SESSION,$ _REQUEST和'EGPCS'排序感到困惑,我認爲所有的東西都合併到了$ _SESSION中。http: //www.php.net/manual/en/ini.core.php#ini.variables-order) – smci 2011-04-11 08:25:44

+1

將$ _POST存儲在$ _SESSION變量中會更容易。例如,$ _SESSION ['page1_post'] = $ _POST。這將避免變量名稱衝突。 – 2011-04-11 10:25:19

相關問題