2011-08-18 103 views
0

我正在構建登錄頁面。現在,我在使用Cookie的頁面上有一個過期。我希望網站在重新登錄後重定向到他們所在的頁面。在cookie中保留正斜槓PHP

爲此,我使用一個具有存儲在其中的頁面名稱的cookie(例如queue.php),並且它會將其取回。

如果我要訪問位於同一目錄中的頁面,但如果我想返回到子目錄(例如Deployment/deployment.php),則此方法無效。

我試過urlencode(),反斜槓,addslashes(),%2F代替正斜槓,並沒有任何東西似乎工作。

這是我如何設置cookie:

$url_name = "Deployment/deployment.php"; 
setcookie("url",$url_name); 

任何幫助,將不勝感激,我完全失去了。

回答

0

也許你可以base64_encode()的值,然後base64_decode它在檢索?只是一個雖然。不過,我不知道爲什麼不允許斜槓。也許別人能啓發我!

1

我不知道你的登錄頁面被發現,但如果Deployment是一個子目錄(所以主文件夾下的一個級別),你應該添加一個斜槓盈的它,像這樣:

$url_name = "/Deployment/deployment.php"; 
setcookie("url", $url_name); 
0

你能解釋一下你的問題嗎?我只是嘗試以下,並能夠檢索cookie的值就好:

<?php 
$url = "http://google.com/mail"; 
echo "Setting cookie with value " . $url . "</br>"; 
setcookie("url", $url); 
echo "The cookie is: " . $_COOKIE['url'] . "</br>"; 
?> 
+0

這不起作用。腳本初始化完成後,超級全局變量不會被php觸及。新的cookie只會顯示在下一頁加載的cookie中。同樣,你在setcookie調用之前有一個回聲,所以這一切產生的是一個「頭已發送」的錯誤,不能設置一個cookie。 –

+0

對,你必須刷新頁面才能獲得cookie的價值。另外,我在發佈之前測試了代碼,並沒有提出「頭文件已發送」錯誤。 – johnluetke

+0

@Marc B:可能他在PHP的ini配置中將output_buffering設置爲TRUE;這不會導致「頭文件已發送」錯誤。 – Pete171

0

究竟是什麼不起作用?正如the manual說:

注意,當你發送cookie cookie的值部分將自動url編碼,並且在接收時,它會自動通過相同的名稱作爲其解碼並分配給一個變量cookie名稱。

所以沒有必要手動編碼/解碼。我不認爲$url_name中的斜線是問題所在。我懷疑你重定向的路徑有些不正確,但是我無法檢查沒有更多的代碼。

1

setrawcookie()似乎是你要做的功能。根據php.net,它與setcookie()完全相同,只是它不會執行任何urlencoding。