2013-04-09 4 views
0

У меня есть система входа в систему AJAX - все данные формы проверяются с использованием PHP, и если есть совпадение для имени пользователя и пароля, он устанавливает определенные файлы cookie.Настройка Cookies AJAX/PHP

Я знаю, что файлы cookie должны быть установлены до НИЧЕГО, но как это возможно с моделью, которую я использую. Я хочу, чтобы весь журнал не обновлялся.

Я получаю сообщение об ошибке: «Не удается изменить информацию в заголовке - заголовки уже отправленную .....»

Кто-нибудь есть какие-либо советы?

Благодаря

EDIT: форма проверяется с помощью оператора IF, то, если условия будут выполнены куки установлены там

код: alllll его

<?php 
session_start(); 
include "connect.php"; 
if ($_POST) { 
    $loginuser = mysql_escape_string($_POST['loginuser']); 
    $loginpass = mysql_escape_string($_POST['loginpass']); 
    $rememberme = mysql_escape_string($_POST['rememberme']); 

    if ($rememberme = 1) { 
     $time = time()+60*60*24*365; 
    } else { 
     $time = time()+3600; 
    } 

    $salt = changedsalt"; 
    $hashed_password = sha1($loginpass).sha1($salt); 

    $getUser_sql = "SELECT * FROM acts WHERE username = '$loginuser' AND hashed_password = '$hashed_password'"; 
    $getUser = mysql_query($getUser_sql); 
    $getUser_RecordCount = mysql_num_rows($getUser);   

    if($getUser_RecordCount == 1) { 
     $rowLogin = mysql_fetch_array($getUser); 
     $user_id = $rowLogin['id']; 
     $emailad = $rowLogin['email']; 
     $activated = $rowLogin['activated'];    
     if ($activated == 1) { 
      $hash = "changedthistoo"; 
      $randstring = rand(5, 10); 
      $code = sha1($hash . $randstring); 
      mysql_query("UPDATE `acts` SET `key` = '$code' WHERE `id` = '$user_id' AND `email` = '$emailad'"); 
      setcookie('AHkey', $code, $time, '/'); 
      setcookie('AHid', $user_id, $time, '/'); 
      setcookie('AHem', $emailad, $time, '/'); 
      setcookie('AHty', 'acts', $time, '/'); 
      setcookie('AHtr', 1, time()+3600, '/'); 
      $data['success'] = true; 
      $data['message'] = "Act Login - Activated"; 
      $data['message'] = $code; 
      echo json_encode($data); 
      exit;    
     } else { 
      $data['success'] = false; 
      $data['message'] = "Act Login - Not Activated"; 
      echo json_encode($data); 
      exit; 
     }  
    } elseif ($getUser_RecordCount == 0) { 
     $getUser_sqlp = "SELECT * FROM promoter WHERE username = '$loginuser' AND hashed_password = '$hashed_password'"; 
     $getUserp = mysql_query($getUser_sqlp); 
     $getUser_RecordCountp = mysql_num_rows($getUserp); 
     $rowLogin = mysql_fetch_array($getUserp); 
     $user_id = $rowLogin['id']; 
     $emailad = $rowLogin['email']; 
     $activated = $rowLogin['activated']; 
     if($getUser_RecordCountp == 1) { 
      if ($activated == 1) { 
       //generate random string 
       $hash = "49ebva09afbh"; 
       $randstring = rand(5, 10); 
       $code = sha1($hash . $randstring); 
       mysql_query("UPDATE `promter` SET `key` = '$code' WHERE `id` = '$user_id' AND `email` = '$emailad'"); 
       setcookie('AHkey', $code, $time, '/'); 
       setcookie('AHid', $user_id, $time, '/'); 
       setcookie('AHem', $emailad, $time, '/'); 
       setcookie('AHty', 'promoter', $time, '/'); 
       setcookie('AHtr', 1, time()+3600, '/'); 
       $data['success'] = true; 
       $data['message'] = "Act Login - Activated"; 
       $data['message'] = $code; 
       echo json_encode($data); 
       exit;       
      } else { 
       $data['success'] = false; 
       $data['message'] = "Promoter Login - Not Activated"; 
       echo json_encode($data); 
       exit; 
      } 
     } else { 
      $data['success'] = false; 
      $data['message'] = "Wrong Username or Password"; 
     }  
    } 
    echo json_encode($data); 
} 
?> 
+0

показать нам код. мы не можем вам помочь без этого! –

+0

Две секунды - добавит его сейчас –

+0

, вы не можете отправлять контент до функции 'header()'. – mkjasinski

ответ

0

использовать пожалуйста ob_start(); перед перенаправлением с использованием header();

перед любым использованием header() есть не должно быть никакого выхода на экран. для более эффективного использования ob_start, пожалуйста, пройдите http://php.net/manual/en/function.ob-start.php

0

Вы можете сохранить session_start() на главной странице индекса вверху. Затем используйте Ajax для отправки данных на этот URL-адрес или страницу.

+0

Итак, я бы все же установил файлы cookie на этом PHP? (Вызывается с использованием AJAX), или мне нужно будет сделать что-то еще? –

+0

u can not set cookie, если вы используете ajax. u должен возвращать данные в json и устанавливать файлы cookie на стороне клиента с помощью js. заголовки уже отправляются обычно, когда вы пытаетесь запустить сеанс, когда сеанс уже запущен. u может использовать 'if (! headers_sent()) session_start();' для проверки. дайте мне знать, если вам нужна помощь в создании файлов cookie с помощью js. –