我有一个关于将我的数据库表链接到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_id
为62
。
但是,当我使用sessions
检查user_id = 62
表中的条目时,id
字段设置为DuQq6JqcFL2HiGGLGJQ9hLNeXaxUAkdYTlJEX1Ag
。
在我看来,会话ID正在立即更改,同时将条目保存到user_emails
表。这也意味着我无法在user_emails.session_id
和sessions.id
之间创建外键,因为它会引发外键约束问题。
这是预期的行为吗?我预计会话表会为每个新会话创建一个新行,而不是覆盖现有行。
希望有人可以对此有所了解。能够将活动链接到sessions
以供将来分析,这将是很好的。在这种情况下,我的逻辑是检查请求的来源,如果用户在收到欢迎电子邮件时将注册报告为未经授权,则可以检查。
我当然将会话驱动程序设置为数据库,以便Laravel自动存储我的所有会话数据。
答案 0 :(得分:0)
对于那些找到此页面的人。我发现原因是我在将信息保存到数据库后立即使用新电子邮件登录用户。根据Laravel文档,出于安全原因,会话ID会自动更改并随每次登录进行更新。
看起来我需要查看日志包来跟踪会话活动,而在这种情况下只存储IP地址是最好的。