cookie被禁用了session還能用嗎

Cookie禁用了据途,Session還能用嗎钮呀?

?Cookie與 Session,一般認為是兩個獨立的東西昨凡,Session采用的是在服務(wù)器端保持狀態(tài)的方案,而Cookie采用的是在客戶端保持狀態(tài)的方案蚁署。但為什么禁用Cookie就不能得到Session呢便脊?因為Session是用Session ID來確定當(dāng)前對話所對應(yīng)的服務(wù)器Session,而Session ID是通過Cookie來傳遞的光戈,禁用Cookie相當(dāng)于失去了Session ID哪痰,也就得不到Session了。

是不是Cookie讓禁用了久妆,Session就一定不能用了呢晌杰?

1.ASP

在ASP中,Session必須倚賴Cookie才可用筷弦,Session是存儲在服務(wù)器端的肋演,而Cookie是存儲在客戶端的,相對而言烂琴,Session的安全性和可靠程度都比Cookie高爹殊。

2.PHP

在PHP中,通過相關(guān)的配置奸绷,可以讓Session不依賴Cookie而存在梗夸。這是因為:? ?????? Session,儲存于服務(wù)器端(默認以文件方式存儲Session)号醉,根據(jù)客戶端提供的Session? ID來得到用戶的文件反症,取得變量的值,Session? ID可以使用客戶端的Cookie或者Http1.1協(xié)議的Query_String(就是訪問的URL的“?”后面的部分)來傳送給服務(wù)器畔派,然后服務(wù)器讀取Session的目錄……铅碍。也就是說,Session ID是取得存儲在服務(wù)上的Session變量的身份證父虑。當(dāng)代碼session_start();運行的時候该酗,就在服務(wù)器上產(chǎn)生了一個Session文件,隨之也產(chǎn)生了與之唯一對應(yīng)的一個Session ID士嚎,定義Session變量以一定形式存儲在剛才產(chǎn)生的Session文件中呜魄。通過Session? ID,可以取出定義的變量莱衩【粜幔跨頁后,為了使用Session笨蚁,你必須又執(zhí)行session_start();將又會產(chǎn)生一個Session文件睹晒,與之對應(yīng)產(chǎn)生相應(yīng)的Session ID趟庄,用這個session id是取不出前面提到的第一個Session文件中的變量的,因為這個Session ID不是打開它的“鑰匙”伪很。如果在session_start();之前加代碼session_id($session? id);將不產(chǎn)生新的Session文件戚啥,直接讀取與這個id對應(yīng)的Session文件。? ?????? PHP中的Session在默認情況下是使用客戶端的Cookie來保存Session? ID的锉试,所以當(dāng)客戶端的cookie出現(xiàn)問題的時候就會影響Session了猫十。必須注意的是:Session不一定必須依賴Cookie,這也是Session相比Cookie的高明之處呆盖。當(dāng)客戶端的Cookie被禁用或出現(xiàn)問題時拖云,PHP會自動把Session ID附著在URL中,這樣再通過Session? ID就能跨頁使用Session變量了应又。但這種附著也是有一定條件的宙项,即“php.ini中的session.use_trans_sid =? 1“,或者編譯時打開打開了“--enable-trans-sid”選項株扛。? ?????? 用過論壇的朋友都知道尤筐,在進入論壇的時候,往往會提示你檢查Cookie是否打開席里,這是因為大多數(shù)論壇都是基于Cookie的叔磷,論壇用它來保存用戶名、密碼等用戶信息奖磁,方便使用改基。而且很多朋友都認為Cookie不安全(其實不是這樣),往往禁用它咖为。其實在PHP程序中秕狰,我們完全可以用Session來代替Cookie,它可以不依賴于客戶端是否開啟Cookie躁染。? ?????? 所以鸣哀,我們可以拋開Cookie使用Session,即假定用戶關(guān)閉Cookie的情況下使用Session吞彤,其實現(xiàn)途徑有以下幾種:

1. 設(shè)置php.ini配置文件中的“session.use_trans_sid = 1”我衬,或者編譯時打開打開了“--enable-trans-sid”選項,讓PHP自動跨頁傳遞Session ID饰恕。

2. 手動通過URL傳值挠羔、隱藏表單傳遞Session ID。

3. 用文件埋嵌、數(shù)據(jù)庫等形式保存Session ID破加,在跨頁過程中手動調(diào)用。

途徑一舉例說明

<?php

// s1.php

session_start();

$_SESSION[’var1’]="中華人民共和國";

$url="<a ;

echo$url;

?>

<?php

// s2.php

session_start();

echo"傳遞的session變量var1的值為:".$_SESSION[’var1’];

?>

運行以上代碼雹嗦,在客戶端cookie正常的情況下范舀,應(yīng)該可以在得到結(jié)果"中華人民共和國"合是。? ?????? 現(xiàn)在你手動關(guān)閉客戶端的cookie,再運行锭环,可能得不到結(jié)果了吧聪全。如果得不到結(jié)果,再設(shè)置php.ini文件中的”session.use_trans_sid = 1“辅辩,或者編譯時打開打開了”--enable-trans-sid選項”荔烧,又得到結(jié)果“中華人民共和國”。?

途徑二舉例說明

<?php

// s1.php

session_start();

$_SESSION[’var1’]="中華人民共和國";

$sn=session_id();

$url="<a .$_SESSION[’var1’];

?>

途徑三舉例說明

<!--login.html-->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Login</title>

<metahttp-equiv="Content-Type"content="text/html; charset=gb2312">

</head>

<body>

? ? ?? 請登錄:

<formname="login"method="post"action="mylogin1.php">

用戶名:<inputtype="text"name="name"><br>

口 令:<inputtype="password"name="pass"><br>

<inputtype="submit"value="登錄">

</form>

</body>

</html>

//mylogin1.php

<?php

$name=$_POST[’name’];

$pass=$_POST[’pass’];

if(!$name||!$pass) {

echo"用戶名或密碼為空,請<a ;

die();

?? }

if(!($name=="laigw"&&$pass=="1234") {

echo"用戶名或密碼不正確踊餐,請<a ;

die();

?? }

//注冊用戶

ob_start();

session_start();

$_SESSION[’user’]=$name;

$psid=session_id();

$fp=fopen("D:\tmp\phpsid.txt","w+");

fwrite($fp,$psid);

fclose($fp);

//身份驗證成功景醇,進行相關(guān)操作

echo"已登錄<br>";

echo"<a 請<a ;

die();

}

?>

同樣請關(guān)閉Cookie測試,用戶名:laigw吝岭;密碼:1234三痰;這是通過文件保存Session ID的,文件是:D:/tmp/phpsid.txt窜管,請根據(jù)自己的系統(tǒng)決定文件名或路徑散劫。?? ??????

總結(jié)一下,上面的方法有一個共同點幕帆,就是在前一頁取得Session ID获搏,然后想辦法傳遞到下一頁,在下一頁的session_start();代碼之前加代碼Session ID(傳過來的Session ID)失乾。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末常熙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碱茁,更是在濱河造成了極大的恐慌裸卫,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纽竣,死亡現(xiàn)場離奇詭異墓贿,居然都是意外死亡,警方通過查閱死者的電腦和手機蜓氨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門聋袋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人语盈,你說我怎么就攤上這事舱馅。” “怎么了刀荒?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵代嗤,是天一觀的道長棘钞。 經(jīng)常有香客問我,道長干毅,這世上最難降的妖魔是什么宜猜? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮硝逢,結(jié)果婚禮上姨拥,老公的妹妹穿的比我還像新娘。我一直安慰自己渠鸽,他們只是感情好叫乌,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徽缚,像睡著了一般憨奸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凿试,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天排宰,我揣著相機與錄音,去河邊找鬼那婉。 笑死板甘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的详炬。 我是一名探鬼主播盐类,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呛谜!你這毒婦竟也來了傲醉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呻率,失蹤者是張志新(化名)和其女友劉穎硬毕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礼仗,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吐咳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了元践。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韭脊。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖单旁,靈堂內(nèi)的尸體忽然破棺而出沪羔,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布蔫饰,位于F島的核電站琅豆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏篓吁。R本人自食惡果不足惜茫因,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杖剪。 院中可真熱鬧冻押,春花似錦、人聲如沸盛嘿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽次兆。三九已至狼渊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間类垦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工城须, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚤认,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓糕伐,卻偏偏與公主長得像砰琢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子良瞧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容