2012-10-22 41 views
3

我只想知道哪一个是处理cookie的最佳方式? 使用Express.js? Node.js或客户端的JavaScript jQuery的?使用javascript或Express.js或node.js处理Cookie?

我有点迷惑与安全的角度。

感谢您的所有帮助/信息。

+0

你是什么意思的“处理饼干”?阐述。 – WTK

+0

我只想处理“保持登录状态”复选框并将其状态存储在brwser cookie中,以便下次不要求用户登录。 –

+0

我已经看到了在express.js中处理的cookies以及使用javascript document.cookies的情况。所以我很困惑,哪一个很好,为什么? –

回答

1

您应该在Cookie中保留一些会话ID,而不是实际的数据(对于大多数情况,尤其是对于任何与用户相关的敏感数据都是如此)。

使用饼干正确的做法是:

  1. 制作用户输入自己的登录/密码,并检查复选框“保持登录”。
  2. 在服务器端,基于输入登录名和密码,确定用户凭证是否有效。
  3. 假设有效凭证,在服务器端创建一些随机ID和存储信息,该给定的随机ID与某些数据(某些用户ID,设置等)有关。
  4. 在服务器端,根据“保持登录状态”复选框的值,您可以执行以下操作:如果复选框被选中,则创建在很远的将来(例如100年)过期一段时间的cookie。如果复选框没有被选中,您可以在浏览器会话结束或例如1小时后将cookie设置为过期。请记住,该用户可以在发送cookie时使用cookie的截止日期,但这完全是另一回事。
  5. 用户(客户端)正在接收您的cookie,其中包含生成的id。每次请求时,Cookie都会通过浏览器发送给您。
  6. 在服务器端,一旦您从客户端获取您的Cookie,请检查您是否知道该ID以及它是否有效。如果是这样 - 从您的数据库或任何其他用户那里获取用户数据并对其进行操作。
+0

非常感谢你为你详细说明:) –

+0

还有一件事我要问。我如何拥有复选框的轨迹。当下一次我会打到页面它会刷新复选框状态?:( –

3

Cookie是HTTP概念,与语言/平台无关。因此,Node.js是服务器端平台,而Express.js是Node.js的服务器端Web应用程序框架,jQuery是客户端库。

从安全角度看,您不应以纯文本格式存储cookie信息。另外,“you shouldn't allow client side scripts to set or read the cookie value”。如果您已经在使用Express.js,那么我会建议您设置&读取Cookie,以便您的应用程序使用Express.js处理并确保您加密cookie值。

+2

“,并确保您加密cookie值” - 也请记住,将数据保存在cookie中并不是最聪明的想法,更好地坚持保留一些id(如果您愿意,会话id),这将成为关键所在你会在服务器端检索会话数据。 – WTK

+1

感谢Ramesh提供您的有效信息。您可以使用express.js分享或提供简单的Cookie处理代码或链接吗? 我使用express.js将Cookie存储在cookie中: response.cookie('name','tobi',{domain:'.example.com',path:'/ admin',secure:true} ); 回应。cookie('rememberme','1',{expires:new Date(Date.now()+ 900000),httpOnly:true}); 并获得作为 logger.info( “请求的Cookie:”,request.cookie.name); 但它似乎并没有工作,并给我undefined :( –

+1

@WTK我完全同意你的看法 – Ramesh

相关问题