繁体   English   中英

网站如何让您保持登录状态

[英]How do websites keep you logged in

快速问题:当您在网站上登录您的帐户时,如何保持登录状态以便您在访问另一个页面时不会一次又一次地登录?

Cookie 和会话是将身份验证详细信息存储在浏览器中的一些传统方式。 然而,通过这些方法,服务器必须跟踪登录用户及其 cookie 以进行验证。 所以在管理登录用户时有一些服务器操作。
然而,有一种称为 JSON Web Token 又名 JWT 的新方法。 这里服务器将生成一个用户特定的令牌并在登录时发送到浏览器客户端。 浏览器将此令牌存储在 HTML5 本地存储或会话存储中,并将随每个请求发送此令牌!
所以这里每次刷新浏览器代码都可以检查本地存储或会话存储中此令牌的可用性。 这种方法的优点是服务器不必跟踪发出的令牌,并且能够在需要时从令牌中提取数据。
此 JWT 广泛用于验证使用高级 Javascript 框架开发的 Web 应用程序:Angularjs 或 Reactjs(带有支持库)

浏览器将通过使用某种浏览器存储让您保持登录状态。 (例如 cookie 或 localStorage 或...)。 该数据称为会话数据。

Html 页面是无状态的,这意味着当您刷新页面时,之前来自服务器的所有数据都将被删除,并且必须再次请求。 要请求受保护的页面,必须在请求页面时通过某种方式发送用户名和密码。

当您第一次登录时,浏览器会将您的用户名和密码存储在其存储中(加密)。 然后当您刷新页面或转到另一个页面时,您的用户名和密码每次都会发送到服务器。 服务器将检查请求是否具有正确的用户凭据,如果是,它将返回只有登录用户才能看到的受保护信息,如果没有,将从服务器发送重定向响应,您将被重定向到登录页面。

您可以通过在登录后清除浏览器缓存然后刷新来简单地进行测试,您将看到您已注销。

这都是关于会话的。

来源

在计算机科学中,特别是网络中,会话是一种半永久性的交互式信息交换,也称为对话、对话或会议,用于两个或多个通信设备之间,或计算机与用户 Web 服务器之间的会话管理.. . 超文本传输​​协议 (HTTP) 是无状态的:运行 Web 浏览器的客户端计算机必须通过每个新的 HTTP GET 或 POST 请求与 Web 服务器建立新的传输控制协议 (TCP) 网络连接。 因此,Web 服务器依赖已建立的 TCP 网络连接的时间不能超过单个 HTTP GET 或 POST 操作。 会话管理是 Web 开发人员用来使无状态 HTTP 协议支持会话状态的技术。 例如,一旦用户通过 Web 服务器的身份验证,用户的下一个 HTTP 请求(GET 或 POST)不应导致 Web 服务器再次询问用户的帐户和密码。 有关用于完成此操作的方法的讨论,请参阅 HTTP cookie 和会话 ID

在多个 Web 服务器必须共享会话状态知识(在集群环境中很典型)的情况下,会话信息必须在运行 Web 服务器软件的集群节点之间共享。 在集群中的节点之间共享会话状态的方法包括:将会话信息多播到成员节点(有关该技术的一个示例,请参阅 JGroups)、使用分布式共享内存或内存虚拟化与伙伴节点共享会话信息、使用网络套接字,将会话信息存储在共享文件系统(例如分布式文件系统或全局文件系统)上,或将会话信息存储在集群外的数据库中。

如果会话信息被认为是不可否认交易所需的瞬态、易失性数据,并且不包含受合规性审计影响的数据,则可以使用任何存储会话信息的方法。 但是,如果会话信息受审计合规性的约束,则应考虑用于会话存储、复制和集群的方法。

在面向服务的体系结构中,消费者应用程序可以使用简单对象访问协议或使用可扩展标记语言 (XML) 消息构造的 SOAP 消息来使 Web 服务器创建会话。

在原始 php 中(大多数知名框架都有会话管理中间件,所以你不必担心)如果你想管理一个会话,你必须包括

session_start();

程序在您的页面顶部。 当您这样做时,您正在创建一个 24 分钟(1440 秒)的会话(默认情况下)。

您可以将其修改为 php.ini 文件中的任何整数。

php 中的所有会话数据都存储在$_SESSION全局中。 因此,它是一个数组,因此您可以设置会话变量(任何您想要的),例如,

$_SESSION['user_name'] = 'ernesto';
$_SESSION['foo'] = 'bar';
...

在您的应用程序的任何时候,您都可以删除 $_SESSION 变量,

session_unset();

假设你已经在上面设置了变量,

print_r($_SESSION);

当您通过未设置过程删除变量时,将打印空数组。

如果你想完全销毁一个会话,

session_destroy();

会为你做的。

使用 cookie可以学习: Cookie或 Session可以学习Session

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM