首页 > 解决方案 > 如何开始使用 PHP 和 MySQL 中的会话 ID?

问题描述

所以我最近决定在我的网站上使用 Session ID 而不是 JWT 进行身份验证,所以我仍然在这里尝试赶上一点。

我想我的担心很简单。如果我要让我的数据库处理当前对登录的用户处于活动状态的会话(可能是通过具有UserID和的列的表SessionID),我如何使用 PHP 生成完全随机的会话 ID?然后我会将该会话 ID 传递到httpOnlycookie 中。

我假设这将适用于我的 Angular 前端,因为我可以withCredentials在每个 http 请求上使用布尔选项,因为我无法直接访问会话 ID cookie。

因此,当用户想要访问受限区域时,他们的 http 请求将包含会话 ID cookie,而我的 PHP 将通过查找CurrentSession表来确定他们的用户 ID。这将允许 PHP 确定用户的访问级别。

所有这些都将通过 HTTPS 连接完成,但我认为我仍然需要担心 CSRF 攻击,所以我可能会使用Double Submit Cookie方法,因为 Angular 已经提供了支持。

所以我想我的主要问题是,是否会简单地找到一种使用 PHP 生成唯一会话 ID 的方法来保护我的应用程序?或者会以某种方式加密会话 ID,以便只有我的 PHP 可以解密它是一个好主意,所以如果攻击者以某种方式从 cookie 访问会话 ID,它只会是它的加密版本,所以它是无用的.

标签: phpmysqlsessioncookies

解决方案


我建议使用 PHP 的session_start()来处理整个会话,包括根据您当时的特定连接需要写入以维护会话的任何 cookie。

您需要做的就是将它放在 PHP 脚本的最顶部:

<?php
session_start();

应该可以使用 PHP 常量“SID”来获取会话 ID,如果您愿意,可以将其存储在 MySQL 中用于其他目的 - 但可能没有必要。您也可以使用 session_id() 。


推荐阅读