2011-09-14 20 views
5

Câu hỏi:

Có thể lưu trữ dữ liệu phiên tương tự với $ _SESSION [ 'somedata'] = "Hello" trong php?

Đây là mã của tôi cho đến nay:

Tạo bộ nhớ lưu trữ

var MemoryStore = express.session.MemoryStore, 
    sessionStore = new MemoryStore(); 

nhanh Config

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    store: sessionStore, 
    secret: 'secret', 
    key: 'express.sid'})); 
    app.use(require('stylus').middleware({src: __dirname + '/public'})); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
}); 

Phân tích cookie để có được phiên id trên cái bắt tay ủy quyền

var parseCookie = require('connect').utils.parseCookie; 

io.set('authorization', function (data, accept) { 
    if (data.headers.cookie) { 
    data.cookie = parseCookie(data.headers.cookie); 
    data.sessionID = data.cookie['express.sid']; 

    sessionStore.get(data.sessionID, function (err, session) { 
     if (err) 
     { 
      accept(err.message, false); //Turn down the connection 
     } 
     else 
     { 
      data.session = session; //Accept the session 
      accept(null, true); 
     } 
    }); 
    } else { 
    return accept('No cookie transmitted.', false); 
    } 
}); 

Lưu trữ 'LOGGEDIN' khi mật khẩu và tên người dùng là 'admin'

io.sockets.on('connection', function (socket) { 

    socket.on('details', function(data){ 
    console.log("Details: " + data.u + data.p); 
    if(data.p == "admin" && data.u == "admin") 
    { 
     //Add the logged in field to the session 
    } 
    }); 
}); 

Nếu người dùng đang đăng nhập chuyển hướng họ đến trang chủ

app.get(navigation.login.uri, function(req, res){ 
    if(req.session.loggedin) 
    { 
    res.redirect('/home'); 
    } 
    else 
    { 
    res.render('login', { 
     title: navigation.login.title, 
     navigation: navigation 
    }); 
    } 
}); 

Khi tôi cố gắng sử dụng:

req.session.loggedIn 

Giá trị không xác định. Đây có phải là sự cố lưu trữ hay tôi truy cập không chính xác không?

Trả lời

0

Bạn thân thiết - chỉ thiếu một vài thứ.

Thông tin bạn đang thu thập trong chức năng cấp phép socket có thể truy cập thông qua socket.handshake trong trình xử lý kết nối của bạn.

Vì vậy, những gì tôi nghĩ rằng bạn muốn là:

io.sockets.on('connection', function (socket) { 

    socket.on('details', function(data){ 
    console.log("Details: " + data.u + data.p); 
    if(data.p == "admin" && data.u == "admin") 
    { 
     //Add the logged in field to the session 
     socket.handshake.session.loggedIn = true; // Set the new session var 
     socket.handshake.session.save();   // Save the modified session 
    } 
    }); 
}); 

Đừng quên lưu phiên sau khi sửa đổi nó nếu không nó không bao giờ được trở lại vào cửa hàng.

+0

Tôi sẽ thử lại sau! Có một trang web với bất kỳ hướng dẫn/thông tin thêm về chủ đề này mà bạn biết không? – Jack

+2

Tôi nhận được lỗi sau: "Đối tượng # không có phương pháp 'lưu' – Jack

0

này làm việc cho tôi - về cơ bản bạn chỉ cần phải thiết lập một quan trọng trong việc sessionStore:

io.sockets.on('connection', function (socket) { 
    socket.on('details', function(data){ 
      console.log("Details: " + data.u + data.p); 
      if(data.p == "admin" && data.u == "admin") 
      { 
       // set the value 
       sessionStore.loggedIn = true; 
       // get the value 
       console.log(sessionStore.loggedIn); 
      } 
    }); 
}); 

Tôi đã thử nó trên một trang web với một số trang con, giá trị là nhất quán. Buộc tải lại hoặc đóng trình duyệt đặt lại.

Các vấn đề liên quan