Zitat:
Zitat von Tuxman
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: