Javascript RESTAPI会话

Javascript RESTAPI会话,javascript,html,session,scala,rest,Javascript,Html,Session,Scala,Rest,我正在构建一个带有后端和前端的web应用程序,后端是用scala构建的,前端是用html、css、jquery(backbone.js、jquery.js、下划线.js)构建的 如何创建登录?因此,基本上你可以将前端视为一个应用程序,我们只向rest后端发出json请求 感谢您的帮助。Scala与否,JSON与否,XHR与否,机制仍然相同。您向服务器发送登录名和密码(在客户端对密码进行盐哈希以使其更安全),服务器对其进行身份验证(检查登录名和密码是否与数据库中的密码匹配),然后它为用户创建会话(

我正在构建一个带有后端和前端的web应用程序,后端是用scala构建的,前端是用html、css、jquery(backbone.js、jquery.js、下划线.js)构建的

如何创建登录?因此,基本上你可以将前端视为一个应用程序,我们只向rest后端发出json请求


感谢您的帮助。

Scala与否,JSON与否,XHR与否,机制仍然相同。您向服务器发送登录名和密码(在客户端对密码进行盐哈希以使其更安全),服务器对其进行身份验证(检查登录名和密码是否与数据库中的密码匹配),然后它为用户创建会话(在数据库中或内存中-取决于您的需要),并将会话ID作为cookie发送给用户(AJAX请求/响应应能与Cookie正常工作)

现在,在每次请求中,您都会检查会话cookie,并验证它是否指向有效用户(即,是否指向任何内容)。注销只需删除具有给定ID的会话条目即可。创建ID的方式应如下:第一:它很长(以最小化会话劫持的威胁),第二:它包含编码的日期(这样您就可以清除过期的会话)

这就是所谓的

//编辑

让我回答评论中的问题。会话是如何工作的

服务器创建会话。会话只是数据库中的表,有两列:ID和Value(这里您将保存用JSON编码的会话数据,并在必要时进行压缩,例如您想从eShop购买的东西)。当客户端成功通过身份验证时,服务器通过cookies将会话ID发送给用户。因此,服务器必须在响应中添加以下标头:

Set-Cookie: session=ID32445235423tdwfnmm; Expires=Wed, 09 Jun 2012 10:18:14 GMT
现在,浏览器理解此标头并为客户端设置cookie。从这一点开始,每当您发出请求时,浏览器都会自动将cookie添加到请求中,因此从现在起,每个请求都将具有以下标头

Cookie: session=ID32445235423tdwfnmm; other_cookie:other_value;
除非日期晚于2012年6月9日星期三10:18:14 GMT。如果是这种情况,我们的会话cookie将被忽略(请注意,这与在服务器端销毁会话不同,您必须手动处理会话)

现在,您必须解码服务器端的
Cookie
头并检索ID。在这一点上,使用某种框架是一个好主意,因为在每个请求中编写解码代码是一种不好的做法。您应该在这里使用所谓的中间件。现在,该中间件检索ID,检查DB会话并存储结果(即,用户是否经过身份验证)在稍后使用的请求对象中(即,在最终请求处理程序中)

因此,正如您所看到的,您根本不使用JavaScript


此外,您还可以仅在登录请求时设置cookie(尽管您可以在每次请求时设置cookie,以减少会话劫持问题,但这更为复杂)。存储ID是浏览器的工作。在服务器端,您只需检查
Cookie
标题是否包含
session
键。

回答得很好,非常感谢,很抱歉我的初学者问题。当我构建移动应用程序时,它们基本上也存储Cookie?@user1328997没问题。我不确定手机(从未使用过手机)但是我相信他们是这样做的。Aight。还有一件事,在验证之后,服务器创建了会话,返回了会话id(json格式)对于客户端来说,javascript创建了cookie,之后会发生什么?每次请求我都会发送会话id?有没有关于这种框架的想法,比如Java/Servlet引擎?我正在考虑一个过滤器实现(Tomcat)。@RonnieKilsbo取决于您使用的语言。我是Python程序员,所以我建议使用Django。