2015-09-08 2 views
0

Я действительно потерялся здесь, пытаясь отправить сеанс с моим почтовым вызовом jquery ajax, вот упрощенный пример моего кода.jquery post ajax call session does not work

ФОМ

Файл, который посылается запрос: запрос

<?php 
    session_start(); 
    $token = md5(rand(1000,9999)); 
    $_SESSION['contactToken'] = $token; 
?> 

<script type="text/javascript"> 
    $.post(ContactUrl,{req:"contact_sub",tok:"<?php echo $token; ?>"},function(contactAns){ 
     alert(contactAns); return false; 
    }); 
</script> 

Файл отправлен:

<?php 
if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="url"){ 
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')){ 

     session_start(); 
     $token = $_POST['tok']; 
     $sess_token = $_SESSION['contactToken']; 

     if($token == $sess_token){ 
      echo "sessions match"; exit(); 
     } 
     else{ 
      echo "sessions does not match"; exit(); 
     } 
    } 
    else{echo "error"; exit();} 
} 
else{echo "error"; exit();} 
?> 

На первый сеанс не получает признания, я сделал все проверки - убедитесь, что оно было в первую очередь, убедитесь, что оно было опубликовано, объявлено начало сеанса на обеих страницах, тем не менее, если я попытался сделать это во втором файле:

<?php 
session_start(); 
$token = $_POST['tok']; 
$sess_token = $_SESSION['contactToken']; 

print_r($_SESSION['contactToken']); exit(); 
?> 

Я бы получил пустое предупреждение. Затем я перенес начало сеанса в начало моего скрипта на второй странице и начал получать значение для сессии:

<?php 
session_start(); 
$sess_token = $_SESSION['contactToken']; 

if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="url"){ 
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')){ 

     $token = $_POST['tok']; 
     echo "$token, $sess_token"; exit(); 

    } 
    else{echo "error"; exit();} 
} 
else{echo "error"; exit();} 
?> 

И что я получаю сейчас, что посланные переменный изменяется каждый раз, когда я освежить но значение $ sess_token всегда дает мне то же значение: 0589dd536fd043ff3865f8223fef3030

Я действительно не понимаю это странное поведение, может кто-нибудь, пожалуйста, помогите мне в этом?

+3

Вы смешиваете PHP и jQuery в своем первом коде? o.0 session_start(); $ .post (ContactUrl, {req: "contact_sub", ~ ~ – hanshenrik

+0

Нет, я просто привел пример кода без его обертывания –

+2

@AlbertKuzmin Пожалуйста, перенесите код PHP между ''. –

ответ

3

Ваша проблема в том, что вы используете PHP вар в скрипте JS без намотав и вторя его .. Вот ваш код изменен:

Вы также пытаются contatenate с . в JS. Это тоже из PHP.

<script type="text/javascript"> 
    $.post(ContactUrl, { 
     req: "contact_sub", 
     tok: "<?php echo $token; ?>" 
    }, function(contactAns) { 
     alert(contactAns); 
     return false; 
    }); 
</script> 

Update

Я вернулся к этому ответу сегодня снова. Это то, что я сделал:

FILE: index.php

<?php 
    session_start(); 
    $token = md5(rand(1000,9999)); 
    $_SESSION["contactToken"] = $token; 
?> 

<script type="text/javascript"> 
    $.post("myOtherScript.php", { 
     req:"contact_sub", 
     tok:"<?php echo $token; ?>" 
    }, function(contactAns){ 
     alert(contactAns); 
     return false; 
    }); 
</script> 

FILE: myOtherScript.php

<?php 
    session_start(); 
    $sess_token = $_SESSION["contactToken"]; 

    if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && ($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest")){ 

     $token = $_POST["tok"]; 
     echo $token ." - ". $sess_token; 

    } else { 
     echo "Not an AJAX request"; 
    } 
?> 

Что я получаю это предупреждение, где один маркер равно другой, и оба обновляются каждый раз, когда я перезагружаю файл index.php.

В заключение, ваша проблема не содержится в коде, который вы использовали.

+0

Извините за путаницу im, фактически вторящую сценарию js из php, почему его написано так, что я обновил свой код в вопросе - моя проблема связана с sessins –

+0

@AlbertKuzmin. Принимая и копируя свой ответ и заменяя свой пример этим, он затрагивает весь контекст вопроса и его ответы. -1 –

+0

Im не заменяя мой код ответом - как я уже сказал, я ошибся в размещении кода, так как в моем реальном коде im imcho js-скрипт со стороны сервера вроде так: $ script = ''; вот почему я вложил php varialbe в '..' вместо . это не моя проблема, в первую очередь переменная была настроена просто отлично. –