avatar
node.js session的问题# Programming - 葵花宝典
T*i
1
今天晚上继续做我的website。
发现了一个问题。express-session貌似不能有多个instance/cookies。
比如Amazon。平时用一个cookie来track user。等你真正check-out了。还要强制你输
入密码。然后生成另一个cookie。这个cookie不但生存期短,而且是ephemeral 的,也
就是关了browser就没了。
这种不同种类的session共存,估计express-session就没戏了。我就是要这种cookie。
又搜了一下,这些cookie都叫啥名呢?好像有个系统mageto给他们起来名字。core
session, customer session, checkout session。
牵狗搜了一下,貌似Mozilla client session支持多个session。但是它缺省是纯
client的。一旦login都抹不掉。还是要加一个session id在数据库里每次验证才安全。
结论,轮子虽多,没几个能用的。可怕是是用轮子的大多不求甚解。
好处,有些一坨坨的源码还是能抄抄的。仅此而已。
avatar
T*i
2
再吐糟一下,我要的login module,就是简单的user/passwd加上这种cookie的支持,
基本没找到现成的轮子可用。

全。

【在 T********i 的大作中提到】
: 今天晚上继续做我的website。
: 发现了一个问题。express-session貌似不能有多个instance/cookies。
: 比如Amazon。平时用一个cookie来track user。等你真正check-out了。还要强制你输
: 入密码。然后生成另一个cookie。这个cookie不但生存期短,而且是ephemeral 的,也
: 就是关了browser就没了。
: 这种不同种类的session共存,估计express-session就没戏了。我就是要这种cookie。
: 又搜了一下,这些cookie都叫啥名呢?好像有个系统mageto给他们起来名字。core
: session, customer session, checkout session。
: 牵狗搜了一下,貌似Mozilla client session支持多个session。但是它缺省是纯
: client的。一旦login都抹不掉。还是要加一个session id在数据库里每次验证才安全。

avatar
N*m
3
passport

【在 T********i 的大作中提到】
: 再吐糟一下,我要的login module,就是简单的user/passwd加上这种cookie的支持,
: 基本没找到现成的轮子可用。
:
: 全。

avatar
T*i
4
我要批评你了。你读帖不仔细。
passport其实是依赖于express-session的。
express-session就是问题所在。
本来我就需要简单的password验证。还不够麻烦的。如果再只能支持一个session。就
彻底对我没用了。

【在 N*****m 的大作中提到】
: passport
avatar
b*e
5
那个server session不好用,scale out web service的时候要做session stickiness
。得不偿失。

全。

【在 T********i 的大作中提到】
: 今天晚上继续做我的website。
: 发现了一个问题。express-session貌似不能有多个instance/cookies。
: 比如Amazon。平时用一个cookie来track user。等你真正check-out了。还要强制你输
: 入密码。然后生成另一个cookie。这个cookie不但生存期短,而且是ephemeral 的,也
: 就是关了browser就没了。
: 这种不同种类的session共存,估计express-session就没戏了。我就是要这种cookie。
: 又搜了一下,这些cookie都叫啥名呢?好像有个系统mageto给他们起来名字。core
: session, customer session, checkout session。
: 牵狗搜了一下,貌似Mozilla client session支持多个session。但是它缺省是纯
: client的。一旦login都抹不掉。还是要加一个session id在数据库里每次验证才安全。

avatar
T*i
6
DNS load balancing没问题吧?

stickiness

【在 b***e 的大作中提到】
: 那个server session不好用,scale out web service的时候要做session stickiness
: 。得不偿失。
:
: 全。

avatar
s*i
7
session is out.
JWT.

全。
[发表自未名空间手机版 - m.mitbbs.com]

【在 T********i 的大作中提到】
: 今天晚上继续做我的website。
: 发现了一个问题。express-session貌似不能有多个instance/cookies。
: 比如Amazon。平时用一个cookie来track user。等你真正check-out了。还要强制你输
: 入密码。然后生成另一个cookie。这个cookie不但生存期短,而且是ephemeral 的,也
: 就是关了browser就没了。
: 这种不同种类的session共存,估计express-session就没戏了。我就是要这种cookie。
: 又搜了一下,这些cookie都叫啥名呢?好像有个系统mageto给他们起来名字。core
: session, customer session, checkout session。
: 牵狗搜了一下,貌似Mozilla client session支持多个session。但是它缺省是纯
: client的。一旦login都抹不掉。还是要加一个session id在数据库里每次验证才安全。

avatar
l*n
8
https://github.com/mozilla/node-client-sessions
// a 1 week session
app.use(sessions({
cookieName: 'shopping_cart',
secret: 'first secret',
duration: 7 * 24 * 60 * 60 * 1000
}));
// a 2 hour encrypted session
app.use(sessions({
cookieName: 'authenticated',
secret: 'first secret',
duration: 2 * 60 * 60 * 1000
}));
avatar
T*i
9
嗯。JWT亮点在于利用了local storage。
不过check out session JWT还是没戏。还要用cookie才行。

【在 s*i 的大作中提到】
: session is out.
: JWT.
:
: 全。
: [发表自未名空间手机版 - m.mitbbs.com]

avatar
T*i
10
我首帖子里提到了。我也是选择这个方案呀。

【在 l**********n 的大作中提到】
: https://github.com/mozilla/node-client-sessions
: // a 1 week session
: app.use(sessions({
: cookieName: 'shopping_cart',
: secret: 'first secret',
: duration: 7 * 24 * 60 * 60 * 1000
: }));
: // a 2 hour encrypted session
: app.use(sessions({
: cookieName: 'authenticated',

avatar
n*t
11
一个 session 里存几个 expiration 行吗?

【在 T********i 的大作中提到】
: 今天晚上继续做我的website。
: 发现了一个问题。express-session貌似不能有多个instance/cookies。
: 比如Amazon。平时用一个cookie来track user。等你真正check-out了。还要强制你输
: 入密码。然后生成另一个cookie。这个cookie不但生存期短,而且是ephemeral 的,也
: 就是关了browser就没了。
: 这种不同种类的session共存,估计express-session就没戏了。我就是要这种cookie。
: 又搜了一下,这些cookie都叫啥名呢?好像有个系统mageto给他们起来名字。core
: session, customer session, checkout session。
: 牵狗搜了一下,貌似Mozilla client session支持多个session。但是它缺省是纯
: client的。一旦login都抹不掉。还是要加一个session id在数据库里每次验证才安全。

avatar
T*i
12
每个cookie可以有单独的expiration。

【在 n*****t 的大作中提到】
: 一个 session 里存几个 expiration 行吗?
avatar
n*t
14
req.session.site.expire = 24hr;
req.session.checkout.expire = 15min;
这样一个 cookie 就可以了。多个 cookie 可能遇到各种奇葩浏览器,觉得还是尽量避
免为好。

【在 T********i 的大作中提到】
: 昨天忘了说了。
: express多个cookie貌似有个bug。现在fix了么?
: http://www.connecto.io/blog/nodejs-express-how-to-set-multiple-

avatar
T*i
15
这个不行的。
expire是HTTP协议规定的属性。是跟cookie走的。
关键是指定某个cookie是ephemeral的,浏览器就要遵守规定,一旦关闭浏览器,
cookie就没了。这需要浏览器配合才行。
否则你在amazon买东西,关浏览器走人。别人马上打开浏览器继续买,如果cookie还在
,浏览器就不会再次强制验证了。
俺1995-1997读硕士的时候领导了一个10多人的小组,做863的web相关项目。从那以后
,web标准也没啥大的进展。

【在 n*****t 的大作中提到】
: req.session.site.expire = 24hr;
: req.session.checkout.expire = 15min;
: 这样一个 cookie 就可以了。多个 cookie 可能遇到各种奇葩浏览器,觉得还是尽量避
: 免为好。

avatar
l*n
16
你这个不是cookie,是session

【在 n*****t 的大作中提到】
: req.session.site.expire = 24hr;
: req.session.checkout.expire = 15min;
: 这样一个 cookie 就可以了。多个 cookie 可能遇到各种奇葩浏览器,觉得还是尽量避
: 免为好。

avatar
c*e
17
session和cookie是2码事。

全。

【在 T********i 的大作中提到】
: 今天晚上继续做我的website。
: 发现了一个问题。express-session貌似不能有多个instance/cookies。
: 比如Amazon。平时用一个cookie来track user。等你真正check-out了。还要强制你输
: 入密码。然后生成另一个cookie。这个cookie不但生存期短,而且是ephemeral 的,也
: 就是关了browser就没了。
: 这种不同种类的session共存,估计express-session就没戏了。我就是要这种cookie。
: 又搜了一下,这些cookie都叫啥名呢?好像有个系统mageto给他们起来名字。core
: session, customer session, checkout session。
: 牵狗搜了一下,貌似Mozilla client session支持多个session。但是它缺省是纯
: client的。一旦login都抹不掉。还是要加一个session id在数据库里每次验证才安全。

avatar
T*i
18
是2码事。这几个轮子,都是试图隐藏cookie,直接提供session的概念。
现在看来,引起的混乱不小。
所有这些轮子,直接简单使用。基本都有这样那样的安全问题。

【在 c*********e 的大作中提到】
: session和cookie是2码事。
:
: 全。

avatar
c*e
19
session只有一个session id,如果被hacker偷了,也就是个id而已,如果你已经log
off
了,那个id 就没用了。
cookie里面可能有密码,非常危险。

【在 T********i 的大作中提到】
: 是2码事。这几个轮子,都是试图隐藏cookie,直接提供session的概念。
: 现在看来,引起的混乱不小。
: 所有这些轮子,直接简单使用。基本都有这样那样的安全问题。

avatar
T*i
20
密码也是hash。不能简单比较危险程度。
问题是,HTTP本身无状态,有些操作需要浏览器配合,比如ephemeral cookie。有些需
要server端配合,比如timestamp + expire。
就这么几招,还能搞出这么多问题。也是醉了。
其实从协议本身看,可以不考虑session,只考虑cookie概念就好了。
至于那个什么JWT,我没看出比cookie有啥优势?如果要安全性好,必须有
1. ephemeral的机制,还是离不开cookie。
2. Server side ID,还是离不开数据库,以及每次查询。
纯属脱裤子放屁。而且其本身还刚刚fix了一系列的安全问题。
不知道有几人能看懂?

【在 c*********e 的大作中提到】
: session只有一个session id,如果被hacker偷了,也就是个id而已,如果你已经log
: off
: 了,那个id 就没用了。
: cookie里面可能有密码,非常危险。

avatar
T*i
21
另外只有cookie就够危险了。
我的同窗师兄,清华的段海新教授,领导团队找出一系列安全漏洞,例如Amazon买东西
不花钱之类的。就目前的状态,基本无解。
他们的做法就是通过劫持明文HTTP协议,注入任意javascript代码。利用代码XSS攻击
amazon的服务,只要你的session还在,就死定了。基本上,你用amazon买东西,不关
浏览器,然后访问任意HTTP的网站,就能中招。
avatar
l*n
22
大师果然厉害。cookie,localStorage, session我都弄过

【在 T********i 的大作中提到】
: 另外只有cookie就够危险了。
: 我的同窗师兄,清华的段海新教授,领导团队找出一系列安全漏洞,例如Amazon买东西
: 不花钱之类的。就目前的状态,基本无解。
: 他们的做法就是通过劫持明文HTTP协议,注入任意javascript代码。利用代码XSS攻击
: amazon的服务,只要你的session还在,就死定了。基本上,你用amazon买东西,不关
: 浏览器,然后访问任意HTTP的网站,就能中招。

avatar
n*t
23
这个 espiration 跟 cookie 无关啊,cookie 只是存储 session id,session 里存储
多个 expiration,完全是 node 自己处理的,你可以给各种状态加上,只要 cookie
还活着。

【在 T********i 的大作中提到】
: 这个不行的。
: expire是HTTP协议规定的属性。是跟cookie走的。
: 关键是指定某个cookie是ephemeral的,浏览器就要遵守规定,一旦关闭浏览器,
: cookie就没了。这需要浏览器配合才行。
: 否则你在amazon买东西,关浏览器走人。别人马上打开浏览器继续买,如果cookie还在
: ,浏览器就不会再次强制验证了。
: 俺1995-1997读硕士的时候领导了一个10多人的小组,做863的web相关项目。从那以后
: ,web标准也没啥大的进展。

avatar
n*t
24
我说的就是 session 里存储不同状态,设定不一样的 exporation 阿庆,楼主要解决
的不就是这个问题吗, cart 可以一直保持,一年也无所谓,checkout 时离上次输入
密码超过 15 分钟就重来。用cookie 存那么多东西即不安全也效率低。

【在 l**********n 的大作中提到】
: 你这个不是cookie,是session
avatar
T*i
25
请参照这个wiki page。
直接跳到Expires and Max-Age
https://en.wikipedia.org/wiki/HTTP_cookie#Expires_and_Max-Age
你看看第二个cookie,是session cookie,也叫in-memory cookie。
这种cookie才是关掉browser自动清除的。其他两个都不是。
其实in memory cookie一般也是有expiration的,只不过是server端check,因为
client来的都是不可信的。
因此,in-memory和expire可以是两码事,结合起来才能更安全。

【在 n*****t 的大作中提到】
: 我说的就是 session 里存储不同状态,设定不一样的 exporation 阿庆,楼主要解决
: 的不就是这个问题吗, cart 可以一直保持,一年也无所谓,checkout 时离上次输入
: 密码超过 15 分钟就重来。用cookie 存那么多东西即不安全也效率低。

avatar
T*i
26
不敢当,我1996年就开始玩cookie和session了。1997年玩ISAPI和NSAPI。

【在 l**********n 的大作中提到】
: 大师果然厉害。cookie,localStorage, session我都弄过
avatar
n*t
27
我的意思是,可以只用一个 cookie, expires = 1year,server 端看到这个 session
id,读出自己的 session data,其中 cart.expiration = 1year,checkout.
expiration =15min,这样会有什么问题吗?这和设置 2 个不同 expires 的 cookie
效果一样的吧

【在 T********i 的大作中提到】
: 请参照这个wiki page。
: 直接跳到Expires and Max-Age
: https://en.wikipedia.org/wiki/HTTP_cookie#Expires_and_Max-Age
: 你看看第二个cookie,是session cookie,也叫in-memory cookie。
: 这种cookie才是关掉browser自动清除的。其他两个都不是。
: 其实in memory cookie一般也是有expiration的,只不过是server端check,因为
: client来的都是不可信的。
: 因此,in-memory和expire可以是两码事,结合起来才能更安全。

avatar
T*i
28
不一样。
我们看看session cookie能不能省?也就是你帖子的checkout cookie。
假定用户中途关掉浏览器退场。你的例子checkout cookie仍在。第三方可能在15分钟
内重新打开浏览器完成checkout。更厉害的是,在这个过程甚至可以修改cart再
checkout,因为一般为了方便系统不会要求反复认证。
我们再看看服务器端数据库操作能不能省?你那个cart cookie有一年生存期。这个
cookie是persistent的存在硬盘上。假定现在是公共电脑。你不希望别人看到你的cart
。你可以选择logout。这样在服务器端你的session id会从数据库删除。假定有人恢复
硬盘文件把删除的cookie恢复,也不会有用,因为服务器端找不到cookie里的session
id会当匿名用户处理。
因此,要安全,cart cookie里面也要编码cookie id而且每次处理http请求都要验证的。
再说jwt。cart cookie可以用jwt替换。checkout cookie不能。即使用jwt,要安全也
不能放弃数据库验证。jwt的概念还行。但是实现我根本不喜欢。

session

【在 n*****t 的大作中提到】
: 我的意思是,可以只用一个 cookie, expires = 1year,server 端看到这个 session
: id,读出自己的 session data,其中 cart.expiration = 1year,checkout.
: expiration =15min,这样会有什么问题吗?这和设置 2 个不同 expires 的 cookie
: 效果一样的吧

avatar
s*i
29
用两个tokens。
浏览器端,一个存 ciokiestore,一个存 webstore.
separation of concerns 正好!

cart
session
[发表自未名空间手机版 - m.mitbbs.com]

【在 T********i 的大作中提到】
: 不一样。
: 我们看看session cookie能不能省?也就是你帖子的checkout cookie。
: 假定用户中途关掉浏览器退场。你的例子checkout cookie仍在。第三方可能在15分钟
: 内重新打开浏览器完成checkout。更厉害的是,在这个过程甚至可以修改cart再
: checkout,因为一般为了方便系统不会要求反复认证。
: 我们再看看服务器端数据库操作能不能省?你那个cart cookie有一年生存期。这个
: cookie是persistent的存在硬盘上。假定现在是公共电脑。你不希望别人看到你的cart
: 。你可以选择logout。这样在服务器端你的session id会从数据库删除。假定有人恢复
: 硬盘文件把删除的cookie恢复,也不会有用,因为服务器端找不到cookie里的session
: id会当匿名用户处理。

avatar
T*i
30
说了,in memory cookie没有其它替代。
其实安全性是很简单的东西。弄成现在这样动不动就让人做错,也是醉了。
所以我一直建议往底层看看。看了后很多时候你就能明白那些现成的轮子都是什么货色
了。

【在 s*i 的大作中提到】
: 用两个tokens。
: 浏览器端,一个存 ciokiestore,一个存 webstore.
: separation of concerns 正好!
:
: cart
: session
: [发表自未名空间手机版 - m.mitbbs.com]

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。