Einzelnen Beitrag anzeigen
  #10  
Alt 28.01.2013, 07:18:34
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Twitter/OAuth: Autorisierung immer zweimal nötig

Zitat:
Zitat von Tuxman Beitrag anzeigen
Dein Code führt beim Klick auf "login" (ruft die userlogin.php auf) übrigens zu einer leeren SESSION-Variable und somit zu einer leeren Seite.
Jo. Da waren ein Fehlerchen drin. Leider darf ich meinen Text nachträglich nicht mehr editieren.
PHP-Code:
<?php
// ...

# Declare

require_once('config.php');

define('ONLINE'get_ini('session.gc_maxlifetime'));
define('INDEX''/index.php');

$url sprintf('http://%s%s',
  
$_SERVER['HTTP_HOST'],
  
rtrim(dirname($_SERVER['SCRIPT_NAME]'), '/\\'));

$indexurl .=  INDEX;
$noauthurl .= NO_AUTH;

$requestUrl   'http://api.twitter.com/oauth/request_token';
$authorizeUrl 'http://api.twitter.com/oauth/authorize';
$accessUrl     'http://api.twitter.com/oauth/access_token';

# main

# Session noch gültig?
if (! empty($_SESSION['online'])){
    if (
time() - $_SESSION['online'] > ONLINE){
        
$_SESSION = array();
        
session_write_close();
        
header("Location: $indexurl");    # <--
        
exit;
    }
}

if (isset(
$_GET["denied"])) {
    
// Benutzer hat die Anmeldung abgebrochen. Schade.
    
$_SESSION = array();
    
session_write_close();
    
header("Location: $indexurl");  # <--
    
exit;
}

if ( empty(
$_SESSION["oauth_request_token"])) {
    
// Der Benutzer hat noch keine Anmeldung.
    
$oauth = new OAuth
        
$consumer_key,
        
$consumer_secret,
        
OAUTH_SIG_METHOD_HMACSHA1,
        
OAUTH_AUTH_TYPE_URI);

    
$tokenInfo                       $oauth->getRequestToken($requestUrl);
    
$_SESSION['oauth_request_token'] = $tokenInfo['oauth_token_secret'];
# Timestamp setzen
    
$_SESSION['online'] = time();
    
$location "$authorizeUrl?oauth_token=$tokenInfo[oauth_token]";
    
session_write_close();
    
header('Location: ' $location);
    exit;
}

if (empty(
$_SESSION["oauth_token"])) {
    if (empty(
$_GET['oauth_token'])) {
        
$_SESSION = array(); // Sitzung leeren
        
session_write_close();
        
header("Location: $indexurl");
        exit;
    }
    
$oauth = new OAuth
        
$consumer_key,
        
$consumer_secret,
        
OAUTH_SIG_METHOD_HMACSHA1,
        
OAUTH_AUTH_TYPE_URI);
    
$oauth->setToken($_GET['oauth_token'], $_SESSION['oauth_request_token']);
    
$tokenInfo $oauth->getAccessToken($accessUrl);

    
$_SESSION["oauth_token"]  = $tokenInfo['oauth_token'];
    
$_SESSION['oauth_token_secret'] = $tokenInfo['oauth_token_secret'];
# timestamp setzen
    
$_SESSION['online'] = time();
    
$oauth->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

    
$oauth->fetch('https://api.twitter.com/1.1/account/verify_credentials.json');
    
$json json_decode($oauth->getLastResponse());
    
$_SESSION["username"] = (string)$json->screen_name// got it. ;-)
    
session_write_close();
    
header("Location: $indexurl");
    exit;
}

if (isset(
$_SESSION["username"])) {
# timestamp setzen
    
$_SESSION['online'] = time();

################
# User ist authentifiziert
################

   
tu_was();

}
?>
Hoffentlich besser... :-?

Zitat:
Ich kann eine eigene php.ini verwenden, wenn nötig. Bzw. tue ich das bereits.
Hinweis: verwende einen eigenen session.save_path. Sonst kann es passieren, daß ein "Nachbar" die Müllentsorgung (GC) anstößt und ggf. Deine session files mit in die Tonne tritt.

Ich verwende im document_root ein ./tmp Verzeichnis für session.save_path und upload_tmp_dir. Und damit kein Client fremdgehen kann, liegt da ein .htaccess file:
Code:
deny from all
Mit Zitat antworten