javascript - 休息 api session

标签 javascript html session scala rest

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

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

感谢您的帮助。

最佳答案

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

现在,在每次请求时,您都会检查 session cookie 并验证它是否指向有效用户(即它是否指向任何东西)。注销就像删除具有给定 ID 的 session 条目一样简单。 ID 应按以下方式创建:首先:它很长(以最大程度地减少 session 劫持的威胁),其次:它包含编码的日期(以便您可以清除过期的 session )。

这就是所谓的Form-based Authentication .

//编辑

让我回答评论中的问题。 session 如何工作?

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

Set-Cookie: session=ID32445235423tdwfnmm; Expires=Wed, 09 Jun 2012 10:18:14 GMT

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

Cookie: session=ID32445235423tdwfnmm; other_cookie:other_value;

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

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

如您所见,您根本没有使用 JavaScript。

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

关于javascript - 休息 api session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331572/

相关文章:

html - 在 html Canvas 上移动图像

PHP Cookie 管理

javascript - 使用 jQuery 插入 HTML 的最简单方法

javascript - 监听 CKEditor 对话框中的点击事件

javascript - 未捕获的网络错误 : Failed to execute 'importScripts' on 'WorkerGlobalScope'

javascript - 我怎样才能使 <img> 适合整个浏览器?

javascript - 加载时不需要的白色补丁

javascript - jQuery - 在按钮上单击触发选择选项

php session_set_cookie_params 和 session_name 查询

java - 如何每隔一小时定期删除 session 数据?