2012-01-19 2 views
0

내 사이트에 새 회원이 등록되면 문제가 발생하여 프로필 페이지로 연결되어야하며 데이터가 표시됩니다.사용자가 등록 할 때 세션 변수가 저장되지 않습니다.

현재 "그 사용자가 존재하지 않습니다."라는 것을 제외하고는 프로필 페이지로 이동합니다. 그것은 세션 변수를 저장하지 않는 것 같습니다. 이 신입 회원을 로그 아웃하고 다시 로그인하면 모든 것이 새로운 세션에서 올바르게 작동합니다.

이 문제의 원인은 무엇입니까? 이 문제를 해결하는 데 도움이되는 몇 가지 코드가 있습니다. 더 많은 코드가 필요하면 알려주십시오. 참고로 경로는 register.php 페이지로 이동 한 다음 profile.php 페이지로 리디렉션되므로 profile.php 코드도 제공합니다.

기능은 다음과 같습니다 register.php에 대한

//adds a user to the database 
    function add_user($user, $pass){ 
    $user = mysql_real_escape_string(htmlentities($user)); 
    $pass = sha1($pass); 
    mysql_query("INSERT INTO `users` (`user_name`, `user_password`) VALUES ('{$user}',  '{$pass}')"); 
    } 

코드는 다음과 같습니다

<?php 

include('core/init.inc.php'); 

$errors = array(); 

if (isset($_POST['username'], $_POST['password'], $_POST['repeat_password'])){ 
if (empty($_POST['username'])){ 

    $errors[] = 'The username cannot be empty.';  
} 

if (empty($_POST['password']) || empty($_POST['repeat_password'])){ 

    $errors[] = 'The password cannot be empty.'; 
} 

if ($_POST['password'] !== $_POST['repeat_password']){ 

    $errors[] = 'Password verification failed.'; 
} 

if (user_exists($_POST['username'])){ 

    $errors[] = 'The username you entered is already taken.'; 
} 

if (empty($errors)){ 
    add_user($_POST['username'], $_POST['password']); 

    $_SESSION['username'] = htmlentities($_POST['username']); 

    header('Location: profile.php'); 
    die(); 
} 
} 
?> 

profile.php 코드는 다음과 같습니다

<?php 

include('core/init.inc.php');  
if (isset($_GET['uid']) && $_GET['uid'] !='') 
{ 
$user_info = fetch_user_info($_GET['uid']); 
} 
else 
{ 
$user_info = fetch_user_info($_SESSION['uid']); 
}  
?> 

기능 fetch_user_info은 다음과 같습니다 // 페치 주어진 사용자의 프로필 정보 function fetch_user_ info ($ uid) { $ uid = (int) $ uid;

$sql = "SELECT 
            `user_name` AS `username`, 
            `user_firstname` AS `firstname`, 
            `user_lastname` AS 'lastname', 
            `user_email` AS `email`, 
            `user_about` AS `about`, 
            `user_location` AS `location`, 
            `user_gender` AS `gender` 
          FROM `users` 
          WHERE `user_id` = {$uid}"; 
    $result = mysql_query($sql); 
    return mysql_fetch_assoc($result); 
} 

<?php 

session_start(); 

$exceptions = array('register', 'login', 'find', 'profile'); 

$page = substr(end(explode('/', $_SERVER['SCRIPT_NAME'])), 0, -4); 

mysql_connect('localhost', 'root', 'root'); 
mysql_select_db('user_system'); 

$path = dirname(__FILE__); 

include("{$path}/inc/user.inc.php"); 


if (isset($_COOKIE['username'], $_COOKIE['password']) && isset($_SESSION['username']) === false){ 

    if ($uid = valid_credentials($_COOKIE['username'], $_COOKIE['password'])){ 

      $_SESSION['username'] = htmlentities($_COOKIE['username']); 
      $_SESSION['uid'] = $uid; 
      setcookie('username', $_COOKIE['username'], time() + 604800); 
      setcookie('password', $_COOKIE['password'], time() + 604800); 
    } 
} 

if (in_array($page, $exceptions) === false){ 

if (isset($_SESSION['username']) === false){ 

      header('Location: login.php'); 
      die(); 
    } 
} 



?> 
+0

'session_start()'를 호출 하시겠습니까? –

+0

아니요, 저는 register.php 나 profile.php에 불려지는 것을 가지고 있지 않았지만 방금 추가하려고 시도했지만 불행히도 문제를 해결하지 못했습니다. – soshannad

답변

0

먼저 init.inc.php, include('core/init.inc.php');을한다 (또는 다른 파일) 비어 session_start() 당신의 $_SESSION를 호출하지 않고 session_start()가 포함되어 있습니다.

둘째 : 나는 당신에게 $_SESSION['uid']을 할당하는 것을 결코 보지 못합니다. $_GET['uid']으로 내 프로필로 리디렉션 하시겠습니까?

registration.php에서 $_SESSION['username']을 설정하고 리디렉션을 수행하고 있기 때문입니다. 리디렉션을 수행하기 전에 $_SESSION['uid']으로 설정할 수도 있습니다.

+0

내가 당신에게 여분의 코드를 보여주는 방법을 알아 보자. 나는 그것을 곧 게시 할 것이다. – soshannad

+0

좋아, 위에 추가했습니다. – soshannad

+0

또한 $ _SESSION [ 'uid'] = $ _POST [ 'user_id'];를 추가했습니다. register.php에서 리디렉션하기 전에 문제를 해결하지 못했습니다. – soshannad

0

첫째, add_user이 시도 :

//adds a user to the database 
function add_user($user, $pass){ 
    $user = mysql_real_escape_string(htmlentities($user)); 
    $pass = sha1($pass); 
    mysql_query("INSERT INTO `users` (`user_name`, `user_password`) VALUES ('{$user}',  '{$pass}')"); 
    return mysql_insert_id(); 
} 

둘째, register.php에 :

[...] 
if (empty($errors)){ 
    $_SESSION['uid'] = add_user($_POST['username'], $_POST['password']); 
    $_SESSION['username'] = htmlentities($_POST['username']); 

    header('Location: profile.php'); 
    die(); 
} 

세션에 액세스해야하는 모든 페이지에서()는으로 session_start했는지 확인하십시오.

희망이 있습니다.

관련 문제