当页面加载时,会通过 PHP 在任何其他内容或标题之前使用以下代码创建一个 cookie:
$steam_login_verify = SteamSignIn::validate();
if(isset($_COOKIE['userid']))
{
//work with cookie value to get data;
$steam_login_verify = $_COOKIE['userid'];
$id = new SteamId($steam_login_verify);
$name = $id->getNickname();
$baseUrl = $id->getBaseUrl();
$medAvatar = $id->getMediumAvatarUrl();
} else if(!empty($steam_login_verify))
{
//create the cookie and store the user id as the value
$exDate = time()+60*60*24*365;
setcookie('userid', $steam_login_verify, $exDate,'/');
$id = new SteamId($steam_login_verify);
$name = $id->getNickname();
$baseUrl = $id->getBaseUrl();
$medAvatar = $id->getMediumAvatarUrl();
}
然后我使用James Auldridge 的jQuery cookie 插件来管理 cookie。
一旦用户通过 Stream 登录,他们的 Steam64Id 将在 cookie 中存储一年,以防止他们每次访问他们的页面时都必须登录(假设他们会定期访问它)。
然后,我在 ajax 调用中使用 Steam64Id 来获取所有用户的朋友,并使用他们的姓名填充选择元素。
页面上有一个“退出”按钮,单击该按钮将删除 cookie 并刷新页面,导致用户不得不再次通过 Steam 登录。这就是我遇到问题的地方。
只要 ajax 调用正在运行(并且需要一段时间才能运行约 57 秒),注销按钮就可以正常工作。一旦该调用完成并填充了 select 元素,注销按钮将失败并在控制台中显示错误:
Uncaught TypeError: Cannot call method 'del' of undefined
这个错误引用的代码是删除cookie并刷新页面的函数:
$('#logout').click(function() {
$.cookies.del('userid');
window.location.reload();
});
我不明白这个错误,或者它为什么被抛出。这里的任何帮助都会很棒。