Ben kullanıyorum PHP 4.3.9, Apache/2.0.52
Ben bir kez I'm losing the session variables once I'm redirected oturum mevcut konum bir oturumda DB değerleri kaydeden bir giriş sistemi çalışma almak için çalışıyorum.
Benim giriş formu sayfasında ve yönlendirildi sayfada oturum kimliği / değerleri yazdırmak için aşağıdaki kodu kullanıyorum:
echo '<font color="red">session id:</font> ' . session_id() . '<br>';
echo '<font color="red">session first name:</font> ' . $_SESSION['first_name'] . '<br>';
echo '<font color="red">session user id:</font> ' . $_SESSION['user_id'] . '<br>';
echo '<font color="red">session user level:</font> ' . $_SESSION['user_level'] . '<br><br>';
Bu benim giriş sayfasından benim tarayıcıda basılmış budur (sadece başlık sayfasında açmış yönlendirmek açıklama). This is the correct info coming from my DB as well, so all is fine at this point.
session id: 1ce7ca8e7102b6fa4cf5b61722aecfbc
session first name: elvis
session user id: 2
session user level: 1
Bu benim (I başlık / yönlendirme yorumsuz zaman) sayfasında giriş / yönlendiriliyorsunuz üzerine basılmış budur. Session ID is the same, ama ben tek oturum değişkenleri için hiçbir değer olsun.
session id: 1ce7ca8e7102b6fa4cf5b61722aecfbc
session first name:
session user id:
session user level:
Ben aşağıdaki hataları alıyorum:
Undefined index: first_name
Undefined index: user_id
Undefined index: user_level
Ben loggedOUT.php yok ama benim loggedIN.php, çağrı DEĞIL bir küresel header.php dosyası var - oturumu tost için):
header.php
<?php
ob_start();
session_start();
//if NOT on loggedout.php, check for cookie. if exists, they haven't explicity logged out so take user to loggedin.php
if (!strpos($_SERVER['PHP_SELF'], 'loggedout.php')) {
/*if (isset($_COOKIE['access'])) {
header('Location: www.mydomain.com/loggedin.php');
}*/
} else {
//if on loggedout.php delete cookie
//setcookie('access', '', time()-3600);
//destroy session
$_SESSION = array();
session_destroy();
setcookie(session_name(), '', time()-3600);
}
//defines constants and sets up custom error handler
require_once('config.php');
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
some page layout stuff
Login portion is eventually called via include
footer stuff
Benim loggedIN.php oturumu başlatmak hiçbir şey yok ama
<?php
session_start();
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
logic of my login script, ben sağ (yaklaşık yarım aşağı) $ _SESSION içine DB sonuçları getiriliyor ediyorum olmanın önemli bir parçası:
if (isset($_POST['login'])) {
//access db
require_once(MYSQL);
//initialize an errors array for non-filled out form fields
$errors = array();
//setup $_POST aliases, clean for db and trim any whitespace
$email = mysql_real_escape_string(trim($_POST['email']), $dbc);
$pass = mysql_real_escape_string(trim($_POST['pass']), $dbc);
if (empty($email)) {
$errors[] = 'Please enter your e-mail address.';
}
if (empty($pass)) {
$errors[] = 'Please enter your password.';
}
//if all fields filled out and everything is OK
if (empty($errors)) {
//check db for a match
$query = "SELECT user_id, first_name, user_level
FROM the rest of my sql here, blah blah blah";
$result = @mysql_query($query, $dbc)
OR trigger_error("Query: $query\n<br />MySQL Error: " . mysql_error($dbc));
if (@mysql_num_rows($result) == 1) { //a match was made, OK to login
//register the retrieved values into $_SESSION
$_SESSION = mysql_fetch_array($result);
mysql_free_result($result);
mysql_close($dbc);
/*
setcookie('access'); //if "remember me" not checked, session cookie, expires when browser closes
//in FF you must close the tab before quitting/relaunching, otherwise cookie persists
//"remember me" checked?
if(isset($_POST['remember'])){ //expire in 1 hour (3600 = 60 seconds * 60 minutes)
setcookie('access', md5(uniqid(rand())), time()+60); //EXPIRES IN ONE MINUTE FOR TESTING
}
*/
echo '<font color="red">cookie:</font> ' . print_r($_COOKIE) . '<br><br>';
echo '<font color="red">session id:</font> ' . session_id() . '<br>';
echo '<font color="red">session first name:</font> ' . $_SESSION['first_name'] . '<br>';
echo '<font color="red">session user id:</font> ' . $_SESSION['user_id'] . '<br>';
echo '<font color="red">session user level:</font> ' . $_SESSION['user_level'] . '<br><br>';
ob_end_clean();
session_write_close();
$url = BASE_URL . 'loggedin_test2.php';
header("Location: $url");
exit();
} else {
//wrong username/password combo
echo '<div id="errors"><span>Either the e-mail address or password entered is incorrect or you have not activated your account. Please try again.</span></div>';
}
//clear $_POST so the form isn't sticky
$_POST = array();
} else {
//report the errors
echo '<div id="errors"><span>The following error(s) occurred:</span>';
echo '<ul>';
foreach($errors as $error) {
echo "<li>$error</li>";
}
echo '</ul></div>';
}
} // end isset($_POST['login'])
if I comment out the header redirect on the login page, I can echo out the $_SESSION variables with the right info from the DB. Once redirected to the login page, however, they're gone/unset.
Herkes herhangi bir fikir var mı? Bu konuda neredeyse bütün gün geçirdim ve ben herhangi bir yakın onu bulmaktan olduğumu söyleyemem.
BTW, Geçenlerde, 2 basit test sayfaları yapılan tek üzerinde bazı değişkenleri set, bir oturumu başladı, bir form / çıktılarının oturum değişkenler okudum ama hiçbir şey yapmadı ikinci bir sayfaya yönlendiriliyorsunuz hangi göndermek vardı. Tüm ben sadece benim ana uygulama yapıyorum şey ile ilgili sorunlar yaşıyorum, iyi iş gibi görünüyor.