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