廢話不多說,分析皆在代碼上
<?php
//cookie跨域問題討論
//關於sessionID, 媒介:通過cookie在瀏覽器和服務器間進行傳遞,從而實現通訊,
// cookie的主要屬性:
// path:cookie的作用域 如:'/'表示當前域名的所有url下,均可訪問到該cookie
// domain:cookie域[由服務器返回,瀏覽器端存儲] 瀏覽器僅在意二級域名?
// expire:cookie的過期時間
/** 測試說明
* 主機域名爲www.caibird.top 而http頭設置的cookie域名爲www.hopeforyou.com
*/
//測試場景:
// 一: 在初次訪問時打開flag-a, 二次訪問關閉
// 二: 在初次訪問時關閉flag-a, 二次訪問打開
//測試一 通過設置cookie的domain域, 觀察瀏覽器端如何響應
#flag-a
// ini_set('session.cookie_domain', 'weibo.com');
#flag-a
session_start();
$timestamp = time();
if (!isset($_SESSION['hope'])) {
$_SESSION['hope'] = $timestamp . ': hope for you!';
}
//測試結論
// 一: 初次訪問該網頁時,瀏覽器並沒有存儲sessionID,原因(猜測)是訪問域名與cookie域名衝突[二級域名不匹配],瀏覽器拒絕了並沒有存儲該cookie, 但是在二次訪問時(flag-a註釋關閉), 服務器與瀏覽器間的會話成功建立[cookie成功實現了交互]
// 二: 服務器與瀏覽器間的會話成功建立[cookie成功實現了交互], 之後再開啓(flag-a註釋打開), 發現會話狀態依舊保持, 原因是因爲sessionID的expire屬性爲session, 即瀏覽器關閉後, sessionID會丟失[原因是cookie存在內存中並沒有存到磁盤上]
//結論:
// 只要認清cookie的本質及其屬性,理解瀏覽器和服務器的會話機制, 再者充分認識cookie在瀏覽器端的存儲機制, 就水到渠成了
//附贈:其他測試方法, 觀察瀏覽器端是否有存儲相關cookie, 及其path, expire等屬性
// 通過setcookie方式
setcookie('where', 'hello kiti', time()+60, '/', '.caibird.top');
setcookie('come', 'here', time()+60, '/', '.caibird.top');
setcookie('zore', 'here', time()+60, '/', '.weibo.com');
echo json_encode($_SESSION); //打印會話<?php
嘻嘻~ 我比較懶...