PHP cookie使用,有帮助吗?

时间:2011-06-29 10:17:53

标签: php session cookies

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已经成功存储,任何想法?

3 个答案:

答案 0 :(得分:1)

Cookie不为空或即使未设置也不会返回空,您应该尝试

if (isset($_COOKIE['oauth_token'])) {

更多信息 http://php.net/manual/en/function.setcookie.php

答案 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()组合,每次通过某一行时都会强制输出到浏览器(然后您可以检查代码执行的距离)。