在子窗口中维护同一个Session

发布于 2024-07-27 16:40:37 字数 1076 浏览 7 评论 0原文

当用户到达我的网站时,将为他们启动一个会话。 在我的网站主页上,有时会使用 JavaScript 生成子窗口

该子窗口会转到 Twitter 网站来验证用户身份,然后重定向回到我网站上的一个脚本,该脚本在 SESSION 中存储一些变量。

我发现子窗口中的 PHP 脚本不知道已设置的 session 和 session_id,因此它启动一个新会话,这意味着父窗口 (index.php) 无法访问这些会话变量。

困惑。 我能做些什么?

更新

这是我的代码,但问题不是我的代码,而是我遇到问题的实现

index.php

<?php session_start(); ?>

oauth.php //child window

<?php session_start();

$_SESSION['screen_name'] =  $twitterInfo->screen_name;

$_SESSION['profile_image_url'] = $twitterInfo->profile_image_url;

?>

当子窗口关闭并且我使用 AJAX 来检查 screen_name 时,它​​会返回一个与子窗口 oauth 不匹配的内容。 php 正在使用不同的会话 (id)。

<?php session_start();

    sleep(1);

    if(isset($_SESSION['screen_name'])){

        echo 'done';
        exit;

    }else{

        echo session_id().$_SESSION['screen_name'];
        exit;

    }
?>

When a user arrives at my site, a session is started for them. There is a point where a child window is spawned using JavaScript on my sites home page.

This child window goes to Twitter site to authenticate the user and it gets redirected back to a script on my site which stores some variables in a SESSION.

I have found out that the PHP script in the child window isn't aware of the session and session_id that is set already and it therefore starts a new session which means the parent window (index.php) can not access those session variables.

I am baffled. What can I do?

Update

Here is my code, but its not my code that is the problem, its the implementation that I am having trouble with.

index.php

<?php session_start(); ?>

oauth.php //child window

<?php session_start();

$_SESSION['screen_name'] =  $twitterInfo->screen_name;

$_SESSION['profile_image_url'] = $twitterInfo->profile_image_url;

?>

When child window closes and I use AJAX to check a screen_name like so, it returns a no match as the child window oauth.php is using a different session (id).

<?php session_start();

    sleep(1);

    if(isset($_SESSION['screen_name'])){

        echo 'done';
        exit;

    }else{

        echo session_id().$_SESSION['screen_name'];
        exit;

    }
?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原野 2024-08-03 16:40:37

如果您使用相同的域,那么 PHP 应该知道会话,因为所有 cookie 都会发送回根据 HTTP 规范设置它们的域。

请注意,www.domain.com 与 domain.com 是不同的域。
还可以为域上的路径设置 Cookie,因此请确保路​​径相同。
还可以使用 * 为多个子域设置 Cookie。

如果您发布相关的 PHP 代码,将会有所帮助。

If you use the same domain, then PHP should be aware of the session since all cookies are sent back to the domain that set them according to the HTTP specs.

Note that www.domain.com is a different domain then domain.com.
Cookies can also be set for a path on a domain, so make sure the path is the same.
Cookies can also be set for multiple sub domains using *.

If you post the relevant PHP code you have, it will help.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文