3 回答

TA貢獻1806條經(jīng)驗 獲得超5個贊
cookie是網(wǎng)站保存在本地的信息,可以通過瀏覽器清除cookie來清除
session可以理解為在服務器的cookie,不會隨用戶清除一般數(shù)據(jù)而消失,session失效一般為三種情況:
第一種是會話結(jié)束
第二種是服務器設(shè)置了session的失效時間
第三種為用戶清除了特征數(shù)據(jù),如保存在cookie中的sessionID,導致服務器認為這是一個新用戶,分配了一個新的session,從而導致了原session失效
總而言之,cookie是存放在用戶本地的,session是存放在服務器的,所以cookie可以節(jié)省服務器資源,但是安全性不如session,session更加安全,但是會占用服務器資源

TA貢獻1886條經(jīng)驗 獲得超2個贊
這兩者,區(qū)別和聯(lián)系其實也挺深奧的,總是了解一些皮毛,每次都得上網(wǎng)查,今天寫下來,每隔段時間就看看,加深記憶。
Session是由應用服務器維持的一個服務器端的存儲空間,用戶在連接服務器時,會由服務器生成一個唯一的SessionID,用該SessionID 為標識符來存取服務器端的Session存儲空間。而SessionID這一數(shù)據(jù)則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID提交到服務器端,來存取Session數(shù)據(jù)。這一過程,是不用開發(fā)人員干預的。所以一旦客戶端禁用Cookie,那么Session也會失效。
服務器也可以通過URL重寫的方式來傳遞SessionID的值,因此不是完全依賴Cookie。如果客戶端Cookie禁用,則服務器可以自動通過重寫URL的方式來保存Session的值,并且這個過程對程序員透明。
可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie數(shù)組的長度也是1,而這個Cookie的名字就是JSESSIONID,還有一個很長的二進制的字符串,是SessionID的值。
大家都知道,http是無狀態(tài)的協(xié)議,客戶每次讀取web頁面時,服務器都打開新的會話,而且服務器也不會自動維護客戶的上下文信息,那么要怎么才能實現(xiàn)網(wǎng)上商店中的購物車呢,session就是一種保存上下文信息的機制,它是針對每一個用戶的,變量的值保存在服務器端,通過SessionID來區(qū)分不同的客戶,session是以cookie或URL重寫為基礎(chǔ)的,默認使用cookie來實現(xiàn),系統(tǒng)會創(chuàng)造一個名為JSESSIONID的輸出cookie,叫做session cookie,以區(qū)別persistent cookies,也就是通常所說的cookie,注意session cookie是存儲于瀏覽器內(nèi)存中的,并不是寫到硬盤上的,這也就是剛才看到的JSESSIONID,通常情是看不到JSESSIONID的,但是當把瀏覽器的cookie禁止后,web服務器會采用URL重寫的方式傳遞Sessionid,就可以在地址欄看到sessionid=KWJHUG6JJM65HS2K6之類的字符串。
明白了原理,就可以很容易的分辨出persistent cookies和session cookie的區(qū)別了,網(wǎng)上那些關(guān)于兩者安全性的討論也就一目了然了,session cookie針對某一次會話而言,會話結(jié)束session cookie也就隨著消失了,而persistent cookie只是存在于客戶端硬盤上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站腳本攻擊,自然不如session cookie安全了。
通常session cookie是不能跨窗口使用的,新開了一個瀏覽器窗口進入相同頁面時,系統(tǒng)會賦予一個新的sessionid,這樣信息共享的目的就達不到了,此時可以先把sessionid保存在persistent cookie中,然后在新窗口中讀出來,就可以得到上一個窗口SessionID了,這樣通過session cookie和persistent cookie的結(jié)合就實現(xiàn)了跨窗口的session tracking(會話跟蹤)。
在一些web開發(fā)的書中,往往只是簡單的把Session和cookie作為兩種并列的http傳送信息的方式,session cookies位于服務器端,persistent cookie位于客戶端,可是session又是以cookie為基礎(chǔ)的,明白的兩者之間的聯(lián)系和區(qū)別,就不難選擇合適的技術(shù)來開發(fā)web service了。

TA貢獻1796條經(jīng)驗 獲得超4個贊
session與cookie的區(qū)別:
1: session的內(nèi)容存在文件里的話,文件在哪兒?
答: 由 session.save_path = "D:/tmp",
如果不指定, 默認放在 C:/windows/temp, Linux下默認在 "/tmp"目錄
2: cookie和session的關(guān)系
答:cookie可以用來存儲 session_id
tangram_guid_1357433851419 思路: 如果cookie被瀏覽器禁用,又怎么辦?
3: session.use_cookies = 1
這個選項是告訴服務器: 用cookie存儲session_id
session.use_only_cookies = 0 ,是否只用cookie來傳session_id
session.use_trans_sid = 1 // 設(shè)置地址欄session_id
4: cookie與session的關(guān)系
答:cookie用來存儲和傳遞session_id
如果禁用了cookie,可不可以用session?
答:可以, 其次,我們可以通過javascript再檢測瀏覽器是否支持cookie,并提示用戶打開cookie
5:session的默認生命周期是多久?
答:關(guān)閉瀏覽器就失效 原因:因為session_id存在于cookie,而默認情況,cookie關(guān)閉瀏覽器即失敗.
6: 如何設(shè)置session生命周期為30分鐘呢?
答:session.cookie_lifetime = 1800 php.ini來設(shè)置
7:http://localhost/0415/set.php , 設(shè)置session,
請問,該session值在哪些路徑下生效??
答: 傳session_id用的cookie在哪生效,session就在哪兒生效
7.5:傳session_id的cookie又在哪兒生效呢?
答: 默認是在'/'目錄下生效
區(qū)別: cookie默認在設(shè)置的目錄下生效,而session默認在/目錄下生效
8: 如果設(shè)置傳session_id的cookie的有效路徑呢?
答:session.cookie_path = /, 這兒可以設(shè)置
- 3 回答
- 0 關(guān)注
- 553 瀏覽
添加回答
舉報