php cookie 作用範圍–不要在當前頁面使用你的cookie

來源:互聯網
上載者:User

因為在本地測試完全沒有問題,所以ssh到遠程伺服器上(不是發行伺服器,建議不要直接在Publish Server上直接改東西),進行了一下斷點的測試,最後發現是一個比較複雜的邏輯中有個函數在建構函式中調用了登陸驗證。沒有驗證通過所以就跳走了。
下面我們通過程式來看一下php cookie的使用,也許你看完上面那段還納悶,這個和cookie有什麼聯絡呢?
大體說一下在我們的MVC結構中所用的登陸驗證:
在controller中的建構函式用有一個專門驗證登陸的函數,根據模組是否需要登陸驗證來加如此函數。
bug程式:在setcookie後,當前頁面進行了登陸驗證。
bug原因:當前頁面是獲得不了在此頁剛剛設定的cookie的
下面我們來用程式測試一下:
這裡是一個設定cookie的函數,我們現在用的,偷懶了 呵呵 複製代碼 代碼如下:function dsetcookie($var, $value, $life = 0) {
global $_cookie_domain, $_cookie_path, $_timestamp, $_SERVER;
setcookie($var, escape($value), $life ? $_timestamp + $life : 0,
$_cookie_path, $_cookie_domain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
}

然後建立test1.php,內容如下: 複製代碼 代碼如下:<?php
$td = date('d');
dsetcookie("testvar",$td,30*24*60*60);
print_r($_COOKIE);
?>

將會得到一個空的數組array();
那我們在設定完後什麼時候才能第一次使用這個$_COOKIE變數呢?
現在我們把test1.php這個程式稍微改動一下: 複製代碼 代碼如下:<?php
$td = date('d');
dsetcookie("testvar",$td,30*24*60*60);
print_r($_COOKIE);//這個要注釋掉 要不然會報header警告
$location = "test2.php";
header("Location: ".$location);
?>

然後我們在test2.php中來顯示$_COOKIE看一下 複製代碼 代碼如下:<?php
print_r($_COOKIE);
?>

這裡我們將會得到:
Array
(
[testvar] =10
)
這裡就能夠獲得並使用這個cookie值了。
為什麼呢?
你可以這麼理解:當前設定的Cookie不是立即生效的,而是要等到下一個頁面時才能看到.
這是由於在設定的這個頁面裡Cookie由伺服器傳遞給客戶瀏覽器,在下一個頁面瀏覽器才能把Cookie從
客戶的機器裡取出傳回伺服器的原因。

先寫到這裡:

你可以通過下面的幾個連結更加深入的瞭解一下COOKIE

PHP COOKIE及其使用

Netscape公司關於Cookie的官方原始定義的網址:http://www.netscape.com/newsref/std/cookie_spec.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.