Как прочитать переменную сеанса из файла 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. Вы можете посоветовать?


person Sarah    schedule 11.02.2015    source источник
comment
Чтобы использовать переменные сеанса PHP с JavaScript, вы должны использовать AJAX для вызова некоторого PHP, который вернет переменные или установит переменные JS после запуска сеанса и до того, как PHP выведет страницу.   -  person Jay Blanchard    schedule 11.02.2015
comment
Отформатируйте эту строку в вопросе var check = '<?php echo $_SESSION["logged_in"]; ?>';   -  person VeeeneX    schedule 11.02.2015
comment
var check = ‹?php echo ' . $_SESSION['вошел в систему']; . '; ?›   -  person user3479671    schedule 11.02.2015
comment
@JayBlanchard, не могли бы вы рассказать, как можно установить переменные с помощью AJAX?   -  person Sarah    schedule 11.02.2015
comment
Я добавил простой пример @Sarah   -  person Jay Blanchard    schedule 11.02.2015


Ответы (5)


Использование 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, но в таком простом примере, как этот, в этом нет необходимости.

person Jay Blanchard    schedule 11.02.2015
comment
session.php для меня - это файл, который вызывается при первоначальном нажатии на логин, и данные отправляются через ajax. В этом случае я вызываю session.php напрямую, что на самом деле устанавливает переменную сеанса. Что делать, если переменная не была установлена? Разве вызов session.php не установит переменную? - person Sarah; 11.02.2015
comment
Мне нужно увидеть код для вашего session.php @Sarah Вы включаете этот файл в тот, который вы показываете выше? - person Jay Blanchard; 11.02.2015

Сделать запрос к кому-нибудь 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 
     })
 })

файл.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
?>
person Alexandru Gojinetchi    schedule 11.02.2015
comment
Опечатка: заменить logged => на "logged" => - person VeeeneX; 11.02.2015
comment
Спасибо за поправку :) - person Alexandru Gojinetchi; 11.02.2015
comment
Ваша переменная сеанса будет неопределенной. - person Jay Blanchard; 11.02.2015
comment
Глобальная переменная сохраняется в другом файле php как: $_SESSION['logged_in'] = 1; - person Alexandru Gojinetchi; 11.02.2015
comment
Я пишу этот код в соответствии с условием - person Alexandru Gojinetchi; 11.02.2015
comment
Прочитайте сначала условие, пожалуйста - person Alexandru Gojinetchi; 11.02.2015
comment
Условие требует $_SESSION @AlexandruGojinetchi. Если вы не используете session_start(), ваша переменная сеанса в файле.php будет недоступна. - person Jay Blanchard; 11.02.2015
comment
lol @JayBlanchard Blanchard. Это просто раздел всего кода (раздел, отвечающий на вопрос), или вы хотите открыть $_SESSION и закрыть ??, если да, я хочу сказать вам, что вы не закрыли весь сеанс - person Alexandru Gojinetchi; 11.02.2015
comment
Речь идет не об открытии и закрытии сеансов @AlexandruGojinetchi, а о помощи пользователю с кодом, который будет работать. В нынешнем виде ваш PHP-код не будет работать. Вы не можете предположить, что ОП будет знать все, что им нужно сделать. - person Jay Blanchard; 11.02.2015
comment
@JayBlanchard Blanchard Как дела, пользователь спрашивает, как получить значение с помощью js, а мне нужно написать, чтобы открыть и закрыть сеанс - person Alexandru Gojinetchi; 11.02.2015

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

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

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

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

person koljanep    schedule 11.02.2015

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

function someFunc(){
    //Fire Ajax request 
    //Set check variable 
    //and perform the function you want to ...
}
person dev_khan    schedule 11.02.2015

<?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>

файл1.php

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

sess.php

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

person Harish Lalwani    schedule 11.02.2015
comment
что находится в файле sess.php? - person Sarah; 11.02.2015
comment
Я создал файл sess.php, в котором запустил сеанс и установил переменную сеанса $_SESSION['logged_in'] . Я включил этот файл в основной файл, где находится ваш код. - person Harish Lalwani; 11.02.2015