Laravel会话ID与数据库

时间:2018-05-10 09:30:35

标签: mysql database laravel session

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

我想将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();

这会将session_id字段保存为(在此示例中)UkPhMBTVq73MX8KaS8CZy0vDG9wtDSNvSYhsRuvL在user_emails表中,user_id62

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

看起来我需要查看日志包来跟踪会话活动,而在这种情况下只存储IP地址是最好的。