1. 程式人生 > >nodeJS中的Cookie和Session

nodeJS中的Cookie和Session

存在 破解 ron app send 第一次 頁面 ble end

Cookie

HTTP是無狀態協議。簡單地說,當你瀏覽了一個頁面,然後轉到同一個網站的另一個頁面,服務器無法認識到,這是同一個瀏覽器在訪問同一個網站。每一次的訪問,都是沒有任何關系的。

那麽世界就亂套了,比如我上一次訪問,登陸了,下一次訪問,又讓我登陸,不存在登陸這事兒了。

Cookie是一個簡單到爆的想法:當訪問一個頁面的時候,服務器在下行HTTP報文中,命令瀏覽器存儲一個字符串;瀏覽器再訪問同一個域的時候,將把這個字符串攜帶到上行HTTP請求中。

第一次訪問一個服務器,不可能攜帶cookie。 必須是服務器得到這次請求,在下行響應報頭中,攜帶cookie信息,此後每一次瀏覽器往這個服務器發出的請求,都會攜帶這個

cookie

特點

cookie是不加密的,用戶可以自由看到;

● 用戶可以刪除cookie,或者禁用它

cookie可以被篡改

cookie可以用於攻擊

cookie存儲量很小。未來實際上要被localStorage替代,但是後者IE9兼容。

express中的cookie,你肯定能想到。 res負責設置cookiereq負責識別cookie

技術分享圖片

技術分享圖片

Session

會話。 Session不是一個天生就有的技術,而是依賴cookie

技術分享圖片

session依賴cookie,當一個瀏覽器禁用cookie的時候,登陸效果消失; 或者用戶清除了cookie,登陸也消失。

sessioncookie不一樣在哪裏呢? session下發的是亂碼,並且服務器自己緩存一些東西,下次瀏覽器的請求帶著亂碼上來,此時與緩存進行比較,看看是誰。

所以,一個亂碼,可以對應無限大的數據。

任何語言中,session的使用,是“機理透明”的。他是幫你設置cookie的,但是足夠方便,讓你感覺不到這事兒和cookie有關。

4.3 session

1 var session = require("express-session");

2

3 app.use(session({

4 secret: ‘keyboard cat‘,

5 resave: false,

6 saveUninitialized: true

7 }))

8

9 app.get("/",function(req,res){

10 if(req.session.login == "1"){

11 res.send("歡迎" + req.session.username);

12 }else{

13 res.send("沒有成功登陸");

14 }

15 });

16

17 app.get("/login",function(req,res){

18 req.session.login = "1"; //設置這個session

19 req.session.username = "考拉";

20 res.send("你已經成功登陸");

21 });

加密使用的是MD5加密。

1 C4CA4238A0B923820DCC509A6F75849B

2 C81E728D9D4C2F636F067F89CC14862C

我愛北京天安沒和小橙子

97AFBA2EE71DE6A78B61149A391A378F

我愛北京天安沒與小橙子:

CCB721C1E26067BBF4BB49DFDBFA0C9E

我愛北京天安門和小橙子

C3D110D2441EF9323D3F1E6082E708F8

不管你加密多大的東西,哪怕10M文字,都會加密為32位的字符串,就是密碼。並且神奇的,數學上能夠保證,哪怕你更改1個文字,都能大變。所以MD5也能用於比對版本。

MD5是數學上,不能破解的。 不能反向破解。

也就是說,C4CA4238A0B923820DCC509A6F75849B 沒有一個函數,能夠翻譯成為1的。

但是,有的人做數據庫,就是把1~999999所有數字都用MD5加密了,然後進行了列表,所以有破解的可能。

nodeJS中的Cookie和Session