休息api会话

onl*_*oon 2 javascript rest session html5 scala

我正在构建一个带有后端和前端的Web应用程序,后端是用scala构建的,前端构建在html,css,jquery(backbone.js,jquery.js,underscore.js)中.

我该如何创建登录?所以基本上你可以看到前端作为一个应用程序,我们只向其余的后端发出json请求.

感谢帮助.

fre*_*ish 8

Scala与否,JSON与否,XHR与否机制仍然相同.您将登录名和密码发送到服务器(在客户端使用salt-hash密码以使其更安全),服务器对其进行身份验证(检查登录名和密码是否与db中的密码相匹配),然后为用户创建会话(在DB或内存中 - 根据您的需要)并将会话ID作为cookie发送给用户(AJAX请求/响应应该与cookie一起正常工作).

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

这就是所谓的基于表单的身份验证.

//编辑

让我在评论中回答这些问题.会话如何运作?

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

Set-Cookie: session=ID32445235423tdwfnmm; Expires=Wed, 09 Jun 2012 10:18:14 GMT
Run Code Online (Sandbox Code Playgroud)

现在,浏览器了解此标头并为客户端设置cookie.从这一点开始,每当您发出请求时,浏览器会自动将cookie添加到请求中,因此从现在开始的每个请求都将具有以下标头

Cookie: session=ID32445235423tdwfnmm; other_cookie:other_value;
Run Code Online (Sandbox Code Playgroud)

除非日期在之后Wed, 09 Jun 2012 10:18:14 GMT.如果是这种情况,那么我们的会话cookie将被省略(请注意,这与在服务器端销毁您必须手动处理的会话不同).

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

因此,您可以看到您根本不使用JavaScript.

您也在登录请求时设置cookie (尽管您可以在每次请求时设置它以缩小会话劫持问题 - 但这更复杂).存储ID是浏览器的工作.在服务器端,您只检查Cookie标头是否包含session密钥.