2015-02-11 4 views
1

Вопросов по этому вопросу было слишком много, но я все еще не понимаю.Как прочитать переменную сеанса из php-файла в JavaScript

Корпус:

  1. гиперссылкой изображение
  2. OnClick изображения: Убедитесь, что сеанс существует
  3. Если сессия существует, открыть ссылку
  4. Если сеанс не существует, показать форму Войти

onclick вызывает функцию JavaScript:

var my_global_link = ''; 
var check = '<?php echo $_SESSION["logged_in"]; ?>'; 

function show_login(link) { 

    if(check == 1) 
    { 
     window.location = link; 
    } 
    else 
    { 
     my_global_link = link; 
      // .. then show login modal that uses 'js/whitepaper-login.js' 
      document.getElementById('light').style.display='block'; 
      document.getElementById('fade').style.display='block'; 
      document.getElementById('fade').scrollIntoView(true); 
    } 

} 

Глобальная переменная сохраняются в другом файле PHP как:

$_SESSION['logged_in'] = 1;

Я не могу захватить значение сеанса в var check. Вы можете посоветовать?

+3

Чтобы использовать переменные сеанса PHP с JavaScript, вы должны использовать AJAX для вызова некоторого PHP, который будет возвращать переменные или устанавливать переменные JS после запуска сеанса и до того, как PHP выведет страницу. –

+0

Пожалуйста, отформатируйте эту строку в вопросе 'var check = ' '; ' – VeeeneX

+0

var check = user3479671

ответ

0

Ваш javascript - не очень хорошее решение, так как его можно легко взломать. Можно просто изменить значение check на все, что угодно, и даже без логина вы сможете получить доступ к ссылке на картинку.

Лучше реализация, вероятно, будет что-то вроде:

<a href="checklogin.php"><img src="img.png" alt="" /></a> 

checklogin.php затем проверить переменную $_SESSION. Если это подтверждено, вы можете использовать header("Location: something.html"); для перенаправления туда, куда вы хотите принести пользователя. Если не вошли в систему, вы можете вместо этого перенаправить на страницу входа в систему: header("Location: login.php");

1

Сделать запрос кому-то file.php

$(document).ready(function(){//run when DOM is loaded 
    $.post("file.php", //make request method POST to file.php 
    function(data){ //callback of request is data 
     var arr = jQuery.parseJSON(data); //make json decoding 
     if(arr.logged == 1) //arr.logged is value needs 
     #do 
    }) 
}) 

file.php

<?php 
session_start(); //start session for my dear friend Jay Blanchard 
$_SESSION['logged_id'] = 1; //init value for example 
$array = array('logged' => $_SESSION['logged_id']);//creat array for encoding 
echo json_encode($array); //make json encoding for call back 
?> 
+0

Typo: change 'logged =>' to '" logged "=>' – VeeeneX

+1

Thx для исправления :) –

+0

Ваша переменная сеанса будет не определена. –

0

@Sarah Вы должны сначала вызовите php-файл через ajax и установите в качестве результата переменную javascript. Поскольку javascript является языком сценариев на стороне клиента, поэтому он не может читать скрипт PHP на стороне сервера. Следовательно, по щелчку Вызов JavaScript функции

function someFunc(){ 
    //Fire Ajax request 
    //Set check variable 
    //and perform the function you want to ... 
} 
0
<?php include "sess.php"; ?> 
<script type="text/javascript"> 
var my_global_link = 'testr.com'; 
var check = '<?php echo $_SESSION["logged_in"]; ?>'; 

function show_login(link) { 

if(check == 1) 
{ 
    window.location = link; 
} 
else 
{ 
    my_global_link = link; 

     document.getElementById('light').style.display='block'; 
     document.getElementById('fade').style.display='block'; 
     document.getElementById('fade').scrollIntoView(true); 
    } 

    } 

    </script> 
    <a href="#" onclick="show_login('test')" >test</a> 

file1.php

<?php 
    session_start(); 
    $_SESSION["logged_in"] = 1; 
    ?> 

sess.php

Я сделал это с помощью двух файлов. Возможно, вы не включили файл сеанса, я думаю. Его работа прекрасна для меня.

+1

Что находится в файле 'sess.php'? – Sarah

+0

Я создал файл sess.php, где я начал сеанс и задал переменную сеанса $ _SESSION ['logged_in']. Я включил этот файл в основной файл, где находится ваш код. –

2

Использование JQuery здесь простой пример того, как получить PHP $_SESSION в вашем JavaScript:

сессии.PHP

<?php 
    session_start(); 
    $_SESSION['foo'] = 'foo'; 
    echo $_SESSION['foo']; // this will be echoed when the AJAX request comes in 
?> 

get_session.html (предполагается, что JQuery был включен)

<script> 
    $(function() { 
     $('a').click(function(event){ // use instead of onclick() 
      event.preventDefault(); // prevents the default click action 

      // we don't need complex AJAX because we're just getting some data 
      $.get('session.php', function(sessionData) { 
       console.log(sessionData); // session data will be 'foo' 
      }); 
     }); 
    }); 
</script> 

<a href="session.php">click</a> 

В случае успеха вы увидите данные и можете использовать его в других функциях JavaScript, передавая данные надлежащим образом. Мне часто бывает удобно использовать данные сеанса json_encode(), возвращая JSON для использования JavaScript, но нет необходимости в простом примере, таком как этот.

+0

«session.php» для меня - это файл, который вызывается при первом щелчке по логину, и данные отправляются через ajax. В этом случае я вызываю session.php напрямую, что фактически означает установку переменной сеанса. Что делать, если переменная не была установлена? Не назовет 'session.php' установить переменную? – Sarah

+0

Мне нужно будет увидеть код для вашего session.php @Sarah Вы включаете этот файл в тот, который вы показываете выше? –

Смежные вопросы