if(!isset($_COOKIE['oauth_token'])){
session_start();
if (empty($_SESSION['access_token']) || empty($_SESSION['access_token']['oauth_token']) || empty($_SESSION['access_token']['oauth_token_secret'])) {header('Location: ./clearsessions.php');}
$access_token = $_SESSION['access_token'];
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
setcookie('oauth_token', $access_token['oauth_token'], time()+60*60*24*30);
setcookie('oauth_token_secret', $access_token['oauth_token_secret'], time()+60*60*24*30);
}
//else use the cookies
else{
$oauth_token = $_COOKIE['oauth_token'];
$oauth_token_secret = $_COOKIE['oauth_token_secret'];
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $oauth_token, $oauth_token_secret);
}
以下是我正在使用的代码片段,基本上我想为用户存储一个长期cookie,这样他们就不必登录到Twitter并在每次连接时都经过漫长的授权我的Web应用程序的过程。所以我试图在这个库(twitteroauth)中使用cookie,因为某些原因页面不会加载这部分代码,如果我要取出if else而只是将$ _SESSION部分保留在代码无故障地工作。
我很困惑,因为我已经检查过并且cookie已经成功存储,任何想法?
答案 0 :(得分:1)
Cookie不为空或即使未设置也不会返回空,您应该尝试
if (isset($_COOKIE['oauth_token'])) {
答案 1 :(得分:0)
你试过了吗?
if(!isset($_COOKIE['oauth_token'])){
注意感叹号;)如果设置了NOT(是),则含义。
答案 2 :(得分:0)
我认为你对cookie的'检查'是不正确的(不是代码明智的,但逻辑明智的),让我删除if
- else
- 语句的所有代码:
if(isset($_COOKIE['oauth_token'])){
// Using $_SESSION
}
// else use the cookie
else {
// Using $_COOKIE
}
你的逻辑说'如果cookie存在使用会话,否则使用cookie'我认为你想说'如果cookie 不存在使用会话,否则使用cookie'。您必须在第一个if
声明中反转您的支票。
if(!isset($_COOKIE['oauth_token'])) {
// Use cookie here
}
更新我重读了你一遍又一遍发布的部分,正如你所说,你的脚本没有任何输出代码,我唯一可以提出来的与您的应用程序崩溃new TwitterOAuth(...);
。您是否可以尝试在没有这两行的情况下运行代码(暂时删除它们并查看是否有页面输出)。
更新#2 我注意到你说你的代码''snippit'确实有效,但合并的代码没有。如果未设置会话,则使用header('Location: ./clearsessions.php');
,如果将其替换为echo "error";
,则在浏览器窗口中获取该会话。 注意这是非常简单的调试,因为我对您系统上发生的事情知之甚少,但事实证明它有效。您还可以选择使用echo - flush()
组合,每次通过某一行时都会强制输出到浏览器(然后您可以检查代码执行的距离)。