Php中的Google登录会话

Php中的Google登录会话,php,session,login,gmail,google-oauth,Php,Session,Login,Gmail,Google Oauth,我为我的网站设计了一个谷歌登录。用户需要使用他或她特定的学校gmail。然而,我遇到了一个问题。如果用户不小心尝试使用另一个不是他学校电子邮件的gmail登录,网站会警告他“你应该使用你学校的gmail”,并将他带回登录页面。然而,如果他再次尝试点击“登录谷歌”(因为他最好能选择正确的谷歌电子邮件地址),他以前的谷歌账户的会话仍在运行,甚至没有给他尝试其他gmail账户的选项。我不知道该怎么办…我会破坏会话吗?用户是否必须手动注销?下面是错误处理代码 unset($_SESSION['t

我为我的网站设计了一个谷歌登录。用户需要使用他或她特定的学校gmail。然而,我遇到了一个问题。如果用户不小心尝试使用另一个不是他学校电子邮件的gmail登录,网站会警告他“你应该使用你学校的gmail”,并将他带回登录页面。然而,如果他再次尝试点击“登录谷歌”(因为他最好能选择正确的谷歌电子邮件地址),他以前的谷歌账户的会话仍在运行,甚至没有给他尝试其他gmail账户的选项。我不知道该怎么办…我会破坏会话吗?用户是否必须手动注销?下面是错误处理代码

    unset($_SESSION['token']);
    $authUrl = $client->createAuthUrl();
    echo ("<SCRIPT LANGUAGE='JavaScript'>
        window.alert('You need to login with your school Google account.')
        window.location.href='http://websitename.com/login';
        </SCRIPT>");
unset($_会话['token']);
$authUrl=$client->createAuthUrl();
回声(“
window.alert('您需要使用您的学校谷歌帐户登录')
window.location.href=http://websitename.com/login';
");

如果在销毁会话后,google身份验证URL将您直接重定向到重定向文件,可能是因为不需要分配新的google访问令牌如果您不需要存储和重复使用同一个访问令牌,并且希望用户在每次使用Google进行身份验证时都登录,您必须在使用令牌后撤销该令牌。

为了撤销访问令牌,您必须执行以下命令行

$client->revokeToken();
此行为的示例代码如下:

$client->setAccessToken($access_token);

  if (!$client->isAccessTokenExpired()) {
    try {

      $plus = new Google_Service_Plus($client); // starts google profile (plus) service
      $me = $plus->people->get('me'); // saves account info
      $email = $me->emails[0]->value; // email
      $id = $me->id; // id
      $name = $me->name->givenName; // name
      $surname = $me->name->familyName; // surname

      $client->revokeToken();

      $user = updateUser($email, $name, $surname, $id, $pic, $shortener); // proprietary function

    } catch (Google_Exception $e) {

      abortLogin("couldn't check google profile details", true); // proprietary function

    }

  } else {

     abortLogin("invalid token", true); // proprietary function

  }

session_destroy();

为什么不完全销毁会话并重新启动?是的,如果您想完全强制注销,只需调用
session\u destroy()
。但是,只需知道它也会丢失存储在那里的任何/所有附加信息。但是在登录时,无论如何都不会有太多的保存。您是否在
unset($\u session['token')之前使用
session\u start()
以及在其他地方使用会话变量之前<代码>会话\u start()
是必需的,即使您试图终止会话。我正在使用会话\u start()。当我放入会话_destroy()时,它会转到注销页面。我不确定我是否能很好地解释我的问题。我只知道session_destroy()并不能满足我的需要。您好,我也遇到了同样的问题,您找到解决方案了吗@编程人员