在不使用会话的情况下实现登录实施


9

Wordpress不使用会话。

我一直想知道当用户从一个页面转到另一个页面时,WP使用什么机制来维护用户状态?

Answers:


12

它使用裸cookie并存储登录状态信息客户端。

在此处输入图片说明

+

在此处输入图片说明

=

wordpress_7339a175323c25a8547b5a6d26c49afa =您的用户名%7C1457109155%7C170f103ef3dc57cdb1835662d97c1e13;

这些饼干和盐从哪里来?

盐在您的wp-config.php文件中:

/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

唯一短语用于加密哈希函数

身份验证cookie,其名称存储在AUTH_COOKIE内部,该身份验证cookie是通过将“ wordpress_”与default-constants.php中设置的siteurl的md5总和连接而成的。这是默认行为,可以通过预先设置一些常量从配置文件中覆盖。

身份验证cookie是用户名的串联,身份验证cookie有效之前的时间戳,以及HMAC,这对于立即拔出TL; DR的用户来说是一种键偏移哈希。这三个变量与管道字符|连接。

这是HMAC的构造方式:

$hash = hash_hmac('md5', $username . '|' . $expiration, wp_hash($username . substr($user->user_pass, 8, 4) . '|' . $expiration, $scheme));

这样安全吗?

根据这篇文章,此答案中的大多数信息都来自于黑客,如果他们知道您的唯一短语是什么,那么黑客将在一周内发出每秒30个请求,如果您的密钥是唯一的,则要花费200,000,000,000,000,000,000,000,000,000,000,000,000倍。


克里斯。会话不是完全一样吗?会话需要客户端站点上的cookie,而服务器使用该cookie来识别它正在处理的用户。我看不出基于会话的实现与该实现之间的区别。
平均乔

2
我突然饿了。
凯文

2
PHP会话在$ _SESSION超级全局变量内存储和跟踪登录信息。当您关闭浏览器时,会话期满。WordPress Auth cookie可以持续更长的几天甚至几周。请参阅:tuxradar.com/practicalphp/10/1/0
Chris_O

0

Cookies只是会话数据的客户端存储... WordPress Cookies

实际上,没有会话的人可以拥有cookie,但是没有cookie的人则不能拥有会话。


恐怕你在这方面犯了错误。wordpress根本不使用会话。
平均乔

PHP cookie是PHP会话的一部分-即使WP可能未将服务器端会话用于会话数据存储(以便与一些糟糕的共享主机兼容)。
马丁·泽特勒

我不确定你的意思。为了在php中使用会话,您必须通过session_start()显式使用在页面顶部启用会话。现在,显然,wordpress session_start()的核心没有任何内容。看到您最近的评论让我感到困惑吗?
2012年

这只是PHP会话的基本原理... session_start()启用服务器端存储,而setcookie()启用会话数据的客户端存储。也许只是摆脱了会话和cookie完全不同的想法-唯一真正的区别是存储位置。
马丁·泽特勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.