express ios 获取sessionidd怎么获取

在线课堂 - 汇智网时间: April 23, 2015
express下使用socket.io来传输用户间的即时消息,如何验证却是个问题,想了一下可以在传输数据中添加一个用于验证的加密字段,不过好像这样有点麻烦,另外一种在io.set('authorization',function{..})中通过handshakeData.headers.cookie获取express下的session来验证,不过socket.io 1.x已经不再使用这种方式,结果绕了很多弯路才找到正确方式,现在使用socket.request.headers.cookie,下面是用法,以此记下
导入相应模块
使用express框架模块,并引入cookie解析和session存储模块:
var express = require('express'),// 导入express框架模块
//cookieParser = require('cookie-parser'),//没有使用express可以使用分离的cookie-parser模块进行解析
parseCookie = express.cookieParser(&secret&),//&secret&改为你的加密签名
//建立一个memory store的实例
storeMemory = new express.session.MemoryStore();
express使用session配置:
app.use(express.bodyParser());
app.use(express.cookieParser());
//解析cookie
//使用secret设置签名来加密,使用key自定义cookie键,store设置存储方式为内存存储方式
app.use(express.session({secret:'secret',key:'connect_sid',store:storeMemory}));
express中获取session进行验证
验证session并进行相关操作,我这里在jade模板中会对传入的authenticated的值进行判断
app.use(function (req,res,next) {
if(req.session.loggedIn){
//do something you need here
res.local('authenticated',true);
//do something you need here
res.local('authenticated',false);
socket.io获取session验证
socket.io 0.9.x版本中使用io.set('authorization',function{..}):
var io = sio.listen(app);
//设置session
io.set('authorization', function(handshakeData, callback){
// 解析客户端的cookie字符串
handshakeData.cookie = parseCookie(handshakeData.headers.cookie)
var connect_sid = handshakeData.cookie['connect_sid']; //connect_sid即我们之前自定义的cookie键字段
if (connect_sid) {
//通过cookie中保存的session的id获取到服务器端对应的session
storeMemory.get(connect_sid, function(error, session){
if (error) {
// if we cannot grab a session, turn down the connection
callback(error.message, false);
// save the session data and accept the connection
handshakeData.session =
callback(null, true);
callback('nosession');
使用io.use(function (socket,next){..})代替io.set('authorization',function{..}),socket.request.headers.cookie代替handshakeData.headers.cookie:
io = sio.listen(app);
//设置socket的session验证
io.use(function (socket,next) {
//parseCookie会解析socket.request.headers.cookie并赋值给执行socket.request.cookies
parseCookie(socket.request, null, function(err) {
if (err) {
console.log(&err parse&);
return next(new Error(&cookie err&));
// cookie中获取sessionId
var connect_sid = socket.request.cookies['connect_sid'];
if (connect_sid) {
//通过cookie中保存的session的id获取到服务器端对应的session
storeMemory.get(connect_sid, function(error, session){
if (error) {
return next(new Error('Authentication error'));
// save the session data and accept the connection
socket.request.session =
现在可以在socket.request.session中看到我们的session数据了:
io.sockets.on('connection', function (socket){
var session = socket.handshake.//session
var name = session.
var password = session.
console.log(name+' '+password);
区别session和cookie
看了这么多,也对session和cookie的概念有些深入了解了。session保存在服务器,而cookie保存在浏览器上,当你浏览网页时,服务器会请求浏览器通过设置cookie来保存一些数据,cookie的内容主要包括:名字,值,过期时间,路径和域,其中如果过期时间不设置就表示浏览器关闭即删除该cookie。
而服务器程序创建session时,会检查浏览器cookie中是否保存有session id的字段,此字段映射到服务器一个对应的session存储区,服务器通过session id找到对应的session来保存数据,而当浏览器中没有session id的时候,服务器端会创建一个新的session并生成一个session id保存在浏览器cookie中。
所以session解决了cookie的一些不安全问题,但是同时session保存在服务器上会占用一些服务器性能,因此一些私密数据应当使用session保存,而其他信息保存为cookie。
另外还有一个之前有些困惑的地方现在也明白些了:express中使用cookieParser对session id进行签名加密,而parseCookie对应就是对cookie进行解签。附上一段cookie-parser模块中处理cookie的代码:
exports.signedCookies = function(obj, secret){
var cookies = Object.keys(obj);
var ret = Object.create(null);
for (var i = 0; i & cookies. i++) {
key = cookies[i];
val = obj[key];
dec = exports.signedCookie(val, secret);
if (val !== dec) {
ret[key] =
delete obj[key];
exports.signedCookie = function(str, secret){
return str.substr(0, 2) === 's:'
? signature.unsign(str.slice(2), secret)
添加新评论
: 建议把背景颜色加一个自定义选项,直接输颜色代码就行,最好有自定义...
: 能用就好 (?????)
: 前两天我回复说填了id和key没效果。但是到了今天就能用了。还有...
: 我也是填了百度云id和key
还是不能翻译,出错了.怎么解决啊?
: 这是appid id和key不正确,注意下两边有没有多填了空格喲
: 感谢博主辛苦开发,换了好几个翻译插件了,感觉这个很顺手呀。冒昧希...
: 你好,我想问下,我申请了自己的appid填进去怎么还是不能翻译,...
: 抓包能不能把百度翻译的api抓出来?
网页版的应该也可以
: 谢谢反馈,你说的都不错,我会慢慢改的,捐款就没必要了
: 附加组件页面(https://addons.mozilla.or...<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&262728293012345678910111213141516171819202122232425262728293031123456
随笔分类(77)
随笔档案(58)
Sheppard Y的独立域名博客
积分与排名
阅读排行榜鑾峰彇SESSIONID涓殑NodeJS-node.js,express,socket.io,sessionid-CodeGo.net
鑾峰彇SESSIONID涓殑NodeJS
鐜板湪锛岀敤鐨凬odeJS鍜宻ocket.io鐜╁紕灏忔椂鍚庯紝鎴戝緱鍒颁竴瀵瑰か濡囨洿澶氱殑闂-鐨勪竴涓槸锛屾垜闇瑕佸緱鍒扮殑SessionID鍐呯殑node.js锛app.get('/' ...-鍥犱负璇ヤ簨浠朵技涔庡苟涓嶇伀鏃讹紝socket.io杩炴帴鏃讹紝瀹冨彧鑳界伀鐏.on('connection', function( ...var express = require('express')()
express.set('port', process.env.PORT || 8080)
var server = require('http').createServer(express)
var socket = require('socket.io').listen(server)
server.listen(express.get('port'))
// this event is fired, get('/', ... isnt!
server.on('connection', function(stream) {
璇ession鏄敱PHP搴旂敤绋嬪簭鏈鍒濆垱寤虹殑 CodeGo.net锛屼綔涓鸿褰曘備細璇濇暟鎹瓨鍌ㄥ湪鏁版嵁搴撲腑锛岃屾垜闇瑕佽闂繖浜涙暟鎹殑鍏抽敭鏄細璇滻D銆備粈涔堟槸寰楀埌瀹冪殑鏈绠鍗曠殑鏂规硶鏄粈涔堬紵鎴戝彂鐜颁竴瀵瑰か濡囩殑渚嬪瓙app.get('/' ...浣嗘垜涓嶅彲鑳藉緱鍒颁簨浠惰Е鍙戠殑銆
鏈枃鍦板潃 锛欳odeGo.net/572515/
-------------------------------------------------------------------------------------------------------------------------
1. 濡傛灉浼氳瘽鏁版嵁琚瓨鍌ㄥ湪cookie涓紙鏈鏈夊彲鑳斤級锛岄偅涔堜綘搴旇鑳藉濂楁帴瀛楁彙鎵嬫湡闂撮噸鏂拌В鏋愯鏁版嵁銆傛垜寮犺创鍦ㄨ繖涓瓟妗堢殑浠g爜锛屼絾鍦ㄨ繖閲屽鍒剁殑浠g爜锛屼互鍙婏細
io.configure(function () {
io.set('authorization', function (handshakeData, callback) {
var cookie = handshakeData.headers.
// parse the cookie to get user data...
// second argument to the callback decides whether to authorize the client
callback(null, true);
濡傛灉浼氳瘽鏁版嵁琚紶鎾湪URL涓紝閭d箞浣犲彲浠ヤ粠鏀堕泦handshakeData.url鎴handshakeData.query銆備綘鍙兘蹇呴』鍋氫綘鑷繁
鏈枃鏍囬 锛氳幏鍙朣ESSIONID涓殑NodeJS
鏈枃鍦板潃 锛欳odeGo.net/572515/
Copyright 漏 2014 CodeGo.net}

我要回帖

更多关于 php获取sessionid 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信