成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

node.js中cookie數(shù)據(jù)丟失導致session失效問題

callmewhy / 3214人閱讀

摘要:問題今天剛準備用作為后端語言來開發(fā)就遇到了一個小坑,網(wǎng)上的資料還是比較的少,于是我決定記錄下來??蛻舻男畔⒍急4嬖谥?。導致問題出現(xiàn)的原因跨域時保存的數(shù)據(jù)丟失了因為中使用的是端口,我啟的服務器用的是端口,端口不一樣也就存在著跨域的問題。

問題

今天剛準備用node.js作為后端語言來開發(fā)就遇到了一個小坑,網(wǎng)上的資料還是比較的少,于是我決定記錄下來。關于session和cookie我就不做具體的介紹了,網(wǎng)上有挺多資料的。我打算實現(xiàn)的功能:登錄,在用戶登錄之后,把用戶的uname存到session里面,在訪問一些需要登錄之后才能訪問的頁面的時候,去sesion中查看時候在該值是否存在,存在則已經(jīng)登錄,不存在則未登錄(一個比較簡單的功能)。但是我發(fā)現(xiàn),在登錄之后,我去設置req.session.user的值,再馬上console.log(req.session.user)的值發(fā)現(xiàn)是可以取到的;跳轉到別的頁面之后,我再去請求req.session.user發(fā)現(xiàn)該值為空,不存在。
劇透一下:該問題是由于跨域時cookie保存的數(shù)據(jù)丟失了而導致的,詳細可看下面
代碼和效果如下
index.js

const http = require("http")
const express = require("express");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const cors = require("cors");
const pool = require("./pool");
const routerUser = require("./router/user");

let app = express();

http.createServer(app).listen(8081);

// 中間件
app.use(bodyParser.urlencoded({
  extended: false 
}));
app.use(cors({
    origin:["http://127.0.0.1","http://localhost","http://127.0.0.1:8080","http://localhost:8080"],
    credentials:true
}));
app.use(cookieParser());
app.use(session({
    secret:"logaawing",
    cookie:{maxAge:60000},
    resave:false,                //每次請求是否需要重新設置cookie
    saveUninitialized:true      //無論是否有cookie,設置標記connect.sid可改名
}));

// 路由器
app.use("/user",routerUser);

user.js //user.js在和index.js同級的router目錄下

const express = require("express")
const pool = require("../pool.js");
let router = express.Router();
module.exports = router;

router.post("/login",function(req,res){
    let uname = req.body.uname;
    let upwd = req.body.upwd;
    let sql = "SELECT user_name FROM home_admin WHERE aname = ? AND apwd = md5(?)";
    pool.query(sql,[uname,upwd],(err,result)=>{
        if(err) throw err;
        if(result.length>0){
            username = result[0].user_name;
            req.session.user = username;
            console.log(req.session);
            res.json({errno:0,uname:username});
        }else{
            res.json({errno:1,msg:"登錄失敗,賬號或密碼錯誤"})
        }
    })
})

router.get("/session",function(req,res){
    console.log(req.session);
    res.send(req.session.user);
})

注:我這兩次訪問是在同一個會話里訪問的
從圖片中可以發(fā)現(xiàn),我在同一個會話里再次去訪問session,發(fā)現(xiàn)這個session已經(jīng)不是同一個session了,我存進去的user也不見了。

思考

出現(xiàn)問題就要解決問題嘛。因為node.js學了也不太久,也沒怎么用過session,我一開始一直以為是由于我的session哪個位置寫錯了所以導致了這個問題的產(chǎn)生, 后來想起之前有個朋友給我說過nodejs中的session有一個坑是跨域導致的。于是我就朝著這個方向去找解決的方法。

解決

session的工作流程:當瀏覽器訪問服務器并發(fā)送第一次請求時,服務器端會創(chuàng)建一個session對象,生成一個類似于key,value的鍵值對, 然后將key(cookie)返回到瀏覽器(客戶)端,瀏覽器下次再訪問時,攜帶key(cookie),找到對應的session(value) 。 客戶的信息都保存在session中。
導致問題出現(xiàn)的原因:跨域時cookie保存的數(shù)據(jù)丟失了
因為vue中使用的是8080端口,我node.js啟的服務器用的是8081端口,端口不一樣也就存在著跨域的問題。
于是我在客戶端中的請求信息中加上了withCredentials:true,也就是在發(fā)起請求的時候要求它一定要帶上cookie信息
我是用vue進行開發(fā)的,下面是在vue中的方法(請求的時候加上credentials: true):

在一般的ajax請求中則要加上

$.ajax({
    xhrFields:{withCredentials:true}
      });

在進行了以上的修改之后再次運行程序可以發(fā)現(xiàn),在同一個會話中再次訪問session的時候,user的值沒有丟失

以上就是我使用node.js exprees框架中的session所遇到的問題以及解決方法,有哪里寫的不對的歡迎大家指出,謝謝!

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/107034.html

相關文章

  • 做了「負載均衡」就可以隨便加機器了嗎?這三招來幫你!

    摘要:因為我們認為正常情況下用戶的不會在短時間內(nèi)發(fā)生變化,所以當我們選擇使用策略進行負載均衡時,意味著期望同一個用戶能夠一直訪問到同一臺服務器上,就像下圖這樣。但是,我們還需要明白一個事實嚴格來說保持本質(zhì)上是破壞了做負載均衡的初衷。 本文長度為3056字,預計讀完需1.1MB流量,建議閱讀8分鐘。 這篇是《分布式關注點系列》中「負載均衡」相關的內(nèi)容最后一發(fā)了,后續(xù)也會繼續(xù)講「高可用」相關的其...

    沈建明 評論0 收藏0
  • Python3網(wǎng)絡爬蟲實戰(zhàn)---18、SessionCookies

    摘要:而在中對象用來存儲特定用戶會話所需的屬性及配置信息。當會話過期或被放棄后,服務器將終止該會話。,即該是否僅被使用安全協(xié)議傳輸。安全協(xié)議有,等,在網(wǎng)絡上傳輸數(shù)據(jù)之前先將數(shù)據(jù)加密。 上一篇文章:Python3網(wǎng)絡爬蟲實戰(zhàn)---17、爬蟲基本原理下一篇文章:Python3網(wǎng)絡爬蟲實戰(zhàn)---19、代理基本原理 在瀏覽網(wǎng)站的過程中我們經(jīng)常會遇到需要登錄的情況,有些頁面只有登錄之后我們才可以訪問...

    SHERlocked93 評論0 收藏0
  • session與登錄機制

    摘要:每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以后的消費相聯(lián)系起來。由于可以被人為的禁止,必須有其他機制以便在被禁止時仍然能夠把傳遞回服務器。 github 地址:戳這里 session 概念 指一類用來在客戶端與服務器之間保持狀態(tài)的解決方案 這種解決方案的存儲結構 特點 由于 Session 是以文本文件形式存儲在服務器端的,所以不怕客戶端修改 Session 內(nèi)容。...

    nifhlheimr 評論0 收藏0
  • sessioncookie

    摘要:的作用就是為了解決協(xié)議無狀態(tài)的缺陷所作的努力。的內(nèi)容主要包括名字,值,過期時間,路徑和域。這種生命期為瀏覽器會話期的被稱為會話。而機制采用的是一種在服務器端保持狀態(tài)的解決方案。中的有效期默認分鐘,也就是說,客戶端超過分鐘,當前就會失效。 會話控制是什么? cookie和session都是跟蹤整個會話過程的技術手段。而會話,就是用戶通過瀏覽器和服務器的一次通話。 為什么要有會話控制? 因...

    ruicbAndroid 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<