从其他网站重定向时会丢失会话变量

4
我使用OAuth在外部网站进行身份验证。一切都很好,但是从外部网站重定向后,会话变量丢失。
摘要: 我在我的网站中存储一个会话变量,然后转到其他网站的登录页面。在登录和确认后,它将重定向到我的回调,当我检查先前的会话变量时,它不见了!如何修复它?
我尝试在使用会话的任何地方调用session_start(),但它不起作用。当然,我已在“php.ini”中启用了会话,并在浏览器中启用了cookie。 :) 我进行了调试,但找不到原因。

enter image description here

更新: 在存储了我的会话变量之后,我发出了这样的请求: http://mixi.jp/connect_authorize.pl?oauth_callback=http%3A%2F%2Fmypage.com%2Fcallback.php&oauth_token=fjdklsfjlksd

请注意oauth_callback,它是重定向URL。我不知道mixi.jp用什么来重定向。


1
远程页面是否对您的页面进行了头部重定向?用户被重定向到的域名是否完全相同?请记住,从会话角度来看,“www.domain.com”和“domain.com”是不同的域名。 - Pekka
抱歉,我不明白你的意思。:( 请看我的更新。 - emeraldhieu
2个回答

3

在重定向前后,确保您的网站域名完全相同。

请注意:

www.yoursite.com 

并且

yoursite.com

在使用cookie时,这是两个不同的网站。


这是正确的。我将 $_SERVER['REDIRECT_SCRIPT_URI'] 设置为我的重定向URI,以确保是否存在 'www'。 - Design by Adrian
redirect_script_URI 可能在您的服务器上无法正常工作,请尝试输出 $_SERVER 以查看您拥有哪些选项!学习自: https://dev59.com/7XVC5IYBdhLWcg3wxEJ1 - Design by Adrian

2

会话ID存储在cookie中。该cookie在您注册的域的每个页面中发送。当您跳转到另一个域时,您的带有会话ID的cookie不会被发送。您必须将会话ID传递给新域,然后在该域中使用会话ID创建一个新的cookie。

header('Location:redirect.php?session=' . session­_id());

然后在重定向的页面中恢复会话

<?php
  session_id($_GET['session']);
  session_start(); 

但是他正在跳转到另一个域名并返回。 当他回来时,cookie 应该仍然存在。 - Pekka
Cookies和重定向总是会引起头痛。 - macjohn
1
我尝试了你的解决方案,但它不起作用。 "其他网站" 不允许我传递一个以上的参数。我的意思是它不允许我将 "&session=xxx" 传回到 "mypage/callback.php",只允许传递 "oauth_token"。 - emeraldhieu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接