cookie認識篇_跨域問題本質

廢話不多說,分析皆在代碼上

<?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

嘻嘻~ 我比較懶... 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章