mysql - Laravel session ID 在数据库中不匹配

标签 mysql database laravel session

我有一个关于在 Laravel 5.6 中将数据库表链接到 session 表的问题。

我想将 user_emails 表中创建电子邮件地址的人员链接到 session 表,以便将来我可以检索有关该交易的详细信息- 比如IP地址。

我正在使用以下代码:

$email = new UserEmail();
$email->user_id = $user->id;
$email->address = $request->email;
$email->token = str_random(30);
$email->session_id = session()->getId();
$email->save();

这会将 user_emails 表中的 session_id 字段保存为(在此示例中)UkPhMBTVq73MX8KaS8CZy0vDG9wtDSNvSYhsRuvLuser_id62 .

但是,当我在 sessions 表中检查 user_id = 62 的条目时,id 字段设置为 DuQq6JqcFL2HiGGLGJQ9hLNeXaxUAkdYTlJEX1Ag .

在我看来,在将条目保存到 user_emails 表时, session ID 立即发生变化。这也意味着我无法在 user_emails.session_idsessions.id 之间创建外键,因为它会引发外键约束问题。

这是预期的行为吗?我预计 session 表将为每个新 session 创建一个新行,而不是覆盖现有行。

希望有人能对此有所启发。如果能够将事件链接到 session 以供将来分析,那就太好了。在这种情况下,我的逻辑是检查请求的来源,如果用户在收到欢迎电子邮件时将注册报告为未经授权。

我当然将 session 驱动程序设置为数据库,以便 Laravel 自动存储我的所有 session 数据。

最佳答案

对于那些找到此页面的人。我发现原因是我在将信息保存到数据库后立即使用新电子邮件登录用户。根据 Laravel 文档,出于安全原因,每次登录时 session ID 都会自动更改和更新。

看起来我需要查看日志包来跟踪 session 事件,在这种情况下最好只存储 IP 地址。

关于mysql - Laravel session ID 在数据库中不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50269688/

相关文章:

MySQL:一个表中的多个时间戳用于 DateAdded、DateUpdated

mysql - 将 MySQL 数据库置于版本控制之下?

mysql - 数据库设计留出时间

php - 如何在该索引页末尾的 xampp php 中查看数据库中的表?

mysql - SQL - 替换多个记录中字符串的特定部分

ajax - 在 october cmd 上使用 AJAX 将值从 FORM 插入到 DB

php - 如何将随机字符串列添加到 laravel 迁移

jquery 表单过滤器在每次选择后不会重置

php - 是否可以将 Bootstrap 字形图标放入 {{ Form::submit (' ' )}} - Laravel

sql - MySQL 加入多对多作为单行