session和cookie

session和cookie都是會話控制思想的體現(xiàn),即:允許服務(wù)器跟蹤同一客戶端的連續(xù)請求盖文。


cookie是什么嘱蛋?

將使用者的資料記錄存放在客戶端的技術(shù)

cookie運(yùn)行原理五续?

首先:服務(wù)器 通過http的響應(yīng)頭 把用戶的信息 以鍵值對的形式發(fā)送到客戶端

然后:當(dāng)客戶端再次訪問同一臺服務(wù)器其他的腳本時洒敏,會自動攜帶cookie中的信息通過http請求頭傳送給服務(wù)器

最后:服務(wù)器接收到信息,重新對登陸者身份進(jìn)行驗(yàn)證

cookie包含了什么疙驾?

cookie包括名字凶伙,值,域它碎,路徑函荣,過期時間。

路徑和域構(gòu)成cookie的作用范圍扳肛。cookie如果不設(shè)置過期時間偏竟,則這個cookie在瀏覽器進(jìn)程 存在時有效,關(guān)閉時銷毀敞峭。如果設(shè)置了過期時間踊谋,則cookie存儲在本地硬盤上,在各瀏覽器進(jìn)程間可以共享旋讹。

怎么設(shè)置cookie殖蚕?

使用php內(nèi)建的setcookie()函數(shù)

setcookie($name,$value,$path,$domain,$source)一共六個參數(shù),一般常用前三個 名字沉迹,值和生存時間睦疫。最后一個source指的是是否僅在安全的https連接時傳送,默認(rèn)false

例:setcookie(‘name’鞭呕,‘tian’蛤育,time()+60*60*24*7,'/test','.baidu.com'瓦糕,‘1’)設(shè)置cookie名為name底洗,值為tian,這個cookie七天后失效咕娄,只在服務(wù)器test目錄下生效亥揖,只在baidu.com的所有子域中生效,僅在安全的連接中才能被設(shè)置

注意:setcookie的第二個參數(shù)只能是字符串或者數(shù)值

怎么刪除cookie圣勒?

第一種方法:setcookie('name')? 省略了別的參數(shù)

第二種方法:setcookie(‘name’费变,'',time()-1)? 把生存時間設(shè)為過期

cookie放哪了?

如果用戶是windows系統(tǒng)圣贸,那么放在了C:\Docunments and Settings\用戶名\Cookies

cookie的形態(tài)挚歧?

cookie可以是單一的,通過setcookie('name','tian') 現(xiàn)在cookie的標(biāo)識符為name

cookie也可以為數(shù)組吁峻,通過setcookie('user[username]','tian') 現(xiàn)在cookie的標(biāo)識符為user[username]昼激,這是一個數(shù)組的下標(biāo)


seesion是什么?

將使用者的資料記錄存放在服務(wù)器端的技術(shù)锡搜。

session是保存使用者的資料在服務(wù)器系統(tǒng)下,而cookie是將數(shù)據(jù)放在客戶端的計算機(jī)之中對于session來說瞧掺,客戶端僅僅保存服務(wù)器為用戶創(chuàng)建的一個session標(biāo)識符稱為sessionID而在服務(wù)器端保存session變量的值耕餐。sessionID是一個32位的字符串,一般情況下sessionID保存在客戶端的cookie里辟狈。如果禁用cookie肠缔,sessionID可以通過隱藏表單傳遞,也可以通過URL重寫哼转,就是把后綴到url傳遞

session運(yùn)行原理明未?

首先:第一次訪問網(wǎng)站,session_start()函數(shù)創(chuàng)建一個sessionID,通過HTTP響應(yīng)頭發(fā)送到客戶端并保存在cookie中壹蔓,同時也在服務(wù)器端創(chuàng)建一個以sessionID命名的文件趟妥,保存用戶的會話信息

然后:用戶再次訪問網(wǎng)站時,先檢查HTTP請求頭中是否有一個sessionID佣蓉,沒有就創(chuàng)建同上一步披摄,有的話就在服務(wù)器硬盤中搜索與seesionID同名的文件,將會話信息讀出勇凭。

session的使用

在php中必須先調(diào)用session_start()函數(shù)疚膊,開啟session。函數(shù)沒有參數(shù)虾标,如果是基于cookie的session寓盗,使用該函數(shù)之前,不能有任何內(nèi)容的輸出。

啟動完成后傀蚌,接下來就是注冊和讀取session變量基显,都要用過全局?jǐn)?shù)組$_SESSION數(shù)組完成session_start();然后注冊session變量$_SESSION['username'] = "tian";

注意:在$_SESSION['username'] = "tian"賦值的同時也會在sessionID文件中追加信息;當(dāng)用戶再次請求本頁或其他頁面喳张,或者 echo $_SESSION['username'] 续镇,是先從這個用戶的seesionID文件中獲取全部的信息數(shù)據(jù)進(jìn)入到$_SESSION數(shù)組中,感覺起來好像是直接從數(shù)組中獲取得值销部。

注銷變量與銷毀Session

1.session_destroy()結(jié)束當(dāng)前的會話摸航,清空會話中所有資源,但不會釋放session相關(guān)變量

2.? unset($_SESSION['username']);? ? ? ? ? ?? //刪除session中注冊的用戶名變量 unset($_SESSION['password']);? ? ? ? ? ? ? ? ?? ? //刪除刪除session中注冊的密碼變量或者直接$_SESSION = array()? ? 將這個全局?jǐn)?shù)組賦為空

3.setcookie(session_name(),'',time()-3600,'/');??? //刪除客戶端的cookie舅桩,這個第一個參數(shù)session_name是php.ini里設(shè)置的sessionID的cookie標(biāo)識符

Session的自動回收機(jī)制

雖然用戶可以點(diǎn)擊“退出”按鈕退出登錄酱虎,但如果直接關(guān)閉瀏覽器或者斷電的情況下載服務(wù)器端保存的Session文件是不會被刪除的,雖然下次登錄會重新分配一個sessionID擂涛,但是之前的Session文件已經(jīng)成為了垃圾文件读串。

在php.ini中使用session.gc_maxlifetime選項指定一個時間,例如1440也就是24分鐘后沒有更新修改時間的session文件就會被‘垃圾回收程序’收回撒妈。

垃圾回收程序是在session_start()函數(shù)調(diào)用時啟動的恢暖,如果用戶很多,可能一秒內(nèi)session_start()函數(shù)會調(diào)用N次狰右,每次都要垃圾回收的話是不合理的杰捂。

可以在php.ini中修改session.gc_probability/session.gc_divisor公式計算概率例如1/100,前者設(shè)為1,后者設(shè)為100棋蚌。

自定義Session處理方式

session默認(rèn)在web服務(wù)器中存儲會話信息嫁佳,但是如果用戶量特別大的情況下,文件I/0開銷會很大谷暮,嚴(yán)重影響效率蒿往,最主要的是不能跨服務(wù)器, 對于大系統(tǒng)一般都會使用多臺服務(wù)器進(jìn)行并發(fā)處理湿弦,這樣就不能達(dá)到跟蹤用戶的目的瓤漏。 ——需要我們改變session存儲方式:

1.使用NFS或者SAMBA共享技術(shù)保存在其他服務(wù)器中。 2.使用數(shù)據(jù)庫保存session信息颊埃。??? 3.(最優(yōu))使用memcache緩存技術(shù)存儲赌蔑。

不論使用哪種方式原理都是一樣的,使用php中的session_set_save_handler()函數(shù)處理:該函數(shù)六個必選參數(shù)竟秫,分別代表了session聲明周期的六個過程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娃惯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肥败,更是在濱河造成了極大的恐慌趾浅,老刑警劉巖愕提,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異皿哨,居然都是意外死亡浅侨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門证膨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來如输,“玉大人,你說我怎么就攤上這事央勒〔患” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵崔步,是天一觀的道長稳吮。 經(jīng)常有香客問我,道長井濒,這世上最難降的妖魔是什么灶似? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮瑞你,結(jié)果婚禮上酪惭,老公的妹妹穿的比我還像新娘。我一直安慰自己者甲,他們只是感情好春感,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著过牙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纺铭。 梳的紋絲不亂的頭發(fā)上寇钉,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音舶赔,去河邊找鬼扫倡。 笑死,一個胖子當(dāng)著我的面吹牛竟纳,可吹牛的內(nèi)容都是我干的撵溃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼锥累,長吁一口氣:“原來是場噩夢啊……” “哼缘挑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桶略,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤语淘,失蹤者是張志新(化名)和其女友劉穎诲宇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惶翻,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姑蓝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吕粗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺荧。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颅筋,靈堂內(nèi)的尸體忽然破棺而出宙暇,到底是詐尸還是另有隱情,我是刑警寧澤垃沦,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布客给,位于F島的核電站,受9級特大地震影響肢簿,放射性物質(zhì)發(fā)生泄漏靶剑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一池充、第九天 我趴在偏房一處隱蔽的房頂上張望桩引。 院中可真熱鬧,春花似錦收夸、人聲如沸坑匠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厘灼。三九已至,卻和暖如春咽瓷,著一層夾襖步出監(jiān)牢的瞬間设凹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工茅姜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闪朱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓钻洒,卻偏偏與公主長得像奋姿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子素标,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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