1

关于这个问题有太多的问题,但我仍然无法理解。

案子:

  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. 你能建议吗?

4

5 回答 5

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 使用,但在像这个这样的简单示例中没有必要这样做。

于 2015-02-11T14:05:26.347 回答
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 
     })
 })

文件.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
?>
于 2015-02-11T13:39:44.727 回答
0

@Sarah您必须首先通过ajax调用php文件并将javascript变量设置为结果。由于 javascript 是客户端脚本语言,因此它无法读取服务器端 PHP 脚本。因此点击调用javascript函数

function someFunc(){
    //Fire Ajax request 
    //Set check variable 
    //and perform the function you want to ...
}
于 2015-02-11T13:50:33.883 回答
0

您的 javascript 不是一个很好的解决方案,因为它很容易被黑客入侵。可以简单地将 的值更改check为任何喜欢的值,即使没有登录也可以访问图片的链接。

更好的实现可能是这样的:

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

checklogin.php 然后将验证该$_SESSION变量。如果经过验证,您可以使用header("Location: something.html");重定向到您想要将用户带到的位置。如果未登录,您可以改为重定向到登录页面:header("Location: login.php");

于 2015-02-11T13:36:25.000 回答
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>

文件1.php

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

sess.php

我已经使用两个文件完成了这项工作。我猜你可能没有包含会话文件。它对我来说工作正常。

于 2015-02-11T13:53:23.797 回答