cookie和session原理
? session
? session_start() 開啟session機制,告訴php我想使用session了
?? ?列:
?? ?$_SESSION['age']='18';
?? ?$_SESSION['name']='zhengsan';
?? ?刪除一個session值
?? ?unset($_SESSION['name'])
?? ?清空session
?? ?session_destroy()
?? ?修改session
?? ?$_SESSION['name']="lisi";
因為session比cookie安全,所以登錄和注冊用session而不用cookie
session是基于cookie的
設置session后再本次會話中session將會共享
本次會話中瀏覽器第一次往服務器上發送http請求
服務器解析請求地址,等解析到session_start()時
會在服務器的//目錄下簡歷一個sess_adcdefg的一個文件,
繼續解析,可以將session值存儲到該文件里,
等該文件解析完畢后回復給瀏覽器,
告訴瀏覽器將sessionID=abcdefg(session文件名稱,以cookie的方式存儲在瀏覽器內存里,
下次再請求改服務器時,
會將sessionID=abcdefg帶到服務器上碰到session_start(),
首先會往/tmp目錄下尋找與sessionID同名的文件,
如果找到就直接用該文件里的數據,如果沒有找到則新建一個文件.
經驗所得:
一般存session時存儲的是登錄用戶基本信息,
一般是個數組,最起碼得有用戶的ID;
注冊時只設置session;
登錄時不管有沒有設置7天免登錄都要設置session,設置7天免登錄就將用戶信息存儲7天;
檢測是否分發登錄時我們只需要檢測session就行,因為session安全;
檢測session之前我們需要檢測上次是否設置了7天免登錄,
(當cookie存在且session不存在時,將cookie里的值賦給session)
cookie
cookie里面只能存基本類型(整型,布爾型,字符串,浮點型....),不能存數組;
會話cookie:cookie值在關閉瀏覽后會消失;
cookie 可以偽造,不安全
?? ?設置cookie
?? ?setcookie( "cookie的名稱","cookie的值")
?? ?取cookie的值
?? ?$_COOKIE["coolie的名稱"]
?? ?持久cookie
?? ?cookie值在關閉瀏覽后不會消失;等時間超過我們設置cookie的時間時才會消失
?? ?setcookie("cookie的名稱","cookie的值",time()+過期時間)
?? ?刪除cookie的值
?? ?setcookie("cookie的名稱","cookie的值",time()-1)
?? ?會話cookie原理
?? ?瀏覽器往服務器發起http請求;服務器會處理http請求,調用php模塊,
?? ?解析請求的頁面,當解析到setcookie("name","zhengsan")這行代碼后,
2等到該頁面完全解析完畢,服務器會回復給瀏覽器,同事告訴瀏覽器讓瀏覽器存儲一下(name=zhengsan)這條數據,存儲到瀏覽器所占用的內存里;
3下一次再次發送http請求時,就會內存里的(name=zhengsan)帶給服務器,服務器就能獲取cookie;
4如果關閉瀏覽器,內存里的數據就會消失,就不會帶數據給服務器了;
</dl>
七天免登陸:
<h4>|:cookie的七天免登陸原理:</h4>
?? cookie的七天免登陸就是將cookie的值存在了客戶端硬盤的文件里了,當關閉瀏覽器后內存中的 cookie值消失了
?? 當再次開啟瀏覽器后如果訪問這個網站的話,瀏覽器會自動將客戶端硬盤的cookie值讀取到內存中通過瀏覽器發送http協議
?? 發送到服務器里,這時候就可以直接訪問了.
?<h4> ||:session的七天免登陸原理:</h4>
?? 其實就是重新走了一次登錄處理頁面,只不過不用再進行數據庫驗證了,
?? 直接從cookie文件中取出來了數據庫里的用戶名和用戶ID
?? 而防非法登錄檢測的就是session里面的數值用戶名和用戶ID
? ?
?? 其實session和cookie的七天免登陸都是省去了登錄處理頁面,直接到了登錄后的首頁
?? 只不過是cookie直接獲取了,而session則是又重新設置了一次將存儲在cookie里的用戶信息
?? 重新設置在了session文件里,從而就實現了免登陸,他們都是免去了數據庫查詢驗證這一步
? session和cookie對比:
?session和cookie都是通過服務器存儲在瀏覽器的,首先服務器先設置session或cookie
?? 設置后再回復給瀏覽器讓瀏覽器存儲在內存中的cookie里,然后在發送http請求時通過
?? http協議將瀏覽器cookie中的值帶入到服務器中,當服務器檢測到值時,程序就會繼續
?? 運行下去,否則的話就是非法登錄.
?:session和cookie原理的詳細分析:
?? <h4>session:</h4>
?? 瀏覽器通過登錄頁面發送http請求發送到服務器,這時候服務器處理登錄請求,
?? 當服務器解析到session_start時就會在服務器的temp文件夾里新建一個空的加密過的文件
?? 這時候就已經成功將session存儲在了服務器里,只不過還沒有回復給瀏覽器,
?? 因為服務器還沒有將這個登錄處理頁面解析完畢,這時候程序繼續向下執行,會進行數據庫
?? 查詢,查詢之后將用戶名和用戶ID值寫入session(‘user’,$user)里面,這時候就會將這個
?? 值寫入到之前session_start()新建的空文件里,這時候之前建的這個文件就在是空的了
?? 如果這時候不跳轉頁面程序退出了話,就相當于服務器將這個頁面解析完畢了,這時候就會通過http協議
?? 將session值回復給瀏覽器通知瀏覽器將session存在瀏覽器的cookie里,但是這時候在服務器的
?? 登錄處理頁面還打印不出來session里面的值,因為服務器要想得到session里面的值,
?? 必須通過瀏覽器發送http協議將存儲在瀏覽器中的cookie值發送到服務器后,服務器才能讀取到,
?? 服務器讀取到來自瀏覽器的cookie值,這時候就會和服務器之前建的文件名作對比,如果匹配的話
?? 服務器就會將session里面的值打印出來顯示在瀏覽器的頁面上,這時已經成功設置了session
?? 只要瀏覽器不關閉內存中的cookie值就不會消失,每次發送http請求時就會將內存中的cookie值帶入到服務器
?? 無論請求那個頁面內存中的cookie值就會帶到服務器,這時候服務器就會對比之前存的session,
?? 如果和服務器的文件名匹配就可以操作,存儲在服務器文件里的session數組值了,
?? 存儲在服務器的session值默認存儲24分鐘,如果超過24分鐘就會自動刪除了,這時候在不關閉瀏覽器的情況下
?? 服務器的session消失了,這時候瀏覽器再發送http請求的話,將內存中的cookie發送到服務器,但是這時候
?? 服務器是沒法和瀏覽器發送過來的session名作對比的,對比不成功的話服務器就不能操作session值了
?? 只有對比成功的話服務器才會將存儲在temp文件夾下的session文件里面的值讀取出來,讀取出來后頁面在
?? 檢測session是否為空時,就會通過檢測了,而且讀取出來的是用戶名和用戶的ID值,因為頁面檢測的是
?? session里面的是值是否為空,這時候如果在服務器里將session文件里面的文件清空,這時候也相當于session為空了
?? 同樣也屬于非法登錄了
?? <h4>cookie:</h4>
?? 瀏覽器發送http請求給服務器服務器處理登錄請求,這時候服務器在解析到setcookie()時
?? 服務器會將setcookie()里面的值存儲在服務器里面,當頁面解析完畢后服務器會將setcookie()里面的值
?? 回復給瀏覽器,瀏覽器就會自覺的將這個值存在瀏覽器的cookie里,當瀏覽器再次發送http請求時,只要瀏覽器內存中的
?? cookie值不消失就會隨著http請求發送給服務器,服務器接收到瀏覽器發來的cookie值后會和之前存儲的cookie值作對比
?? 如果對比成功就會可以跳轉頁面了,之所以說cookie不安全時是因為,cookie的值是明文顯示而且是由PHP進行設置,對比的時候
?? 也是PHP語言加密方式和瀏覽器之間作對比,即使通過base64_encode()函數加密通過base64_decode()函數解密,
?? 但是這樣即使是加密過的也可以通過解密函數將其解密,當然如果是層層加密的話就不好解密了,但是這樣還沒有session安全
?? 因為session是服務器沒有通過任何加密方式分配的session文件,而且24分鐘自動刪除,不會被偽造也不會重復,而且瀏覽器里
?? 存儲的cookie只是一個引路者的角色,當瀏覽器將內存中的cookie帶到服務器后,
?? 服務器對比后才會把存儲在服務器文件夾里的session文件里的值調取出來,cookie存儲服務器的值時固定不變的,
?? 而且不會刪除,但是session存服務器的值時隨機分配的session文件,所以說cookie可以偽造了
轉載于:https://www.cnblogs.com/wy521/p/7702244.html
總結
以上是生活随笔為你收集整理的cookie和session原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下安装python dlib依
- 下一篇: 获取minist数据并转换成lmdb