为客户端显示存储的会话数据时,正确的事件链是什么


What is the right chain of events when displaying stored session data for client

下面的链是否正确?

首先,我显示客户端home.php,它将创建一个会话并存储在$_session['name']='random_name'中,并将问候最终用户客户端:

<?php
  session_start();
  $_SESSION['name'] = 'random_name';
?>

 <!DOCTYPE html>
 <html>
  <head>
        <title></title>
  </head>
  <body>
        <h1>Greeting</h1>
        <a id="1" href="index.php">link</a>
  </body>
  </html>  

然后,我将按下链接,它将带我进入第二个页面index.php,它将引导我进入另一个页面,在页面内的某些逻辑执行后,该页面将为用户显示$_SESSION[‘name’]内的值,如下所述:

 <?php
    session_start();
  ?>
  <!DOCTYPE html>
  <html>
  <head>
        <script src="test.js"> </script>
        <title></title>
   </head>
   <body>
       <p id="para"></p>
       <input type="button" onclick="checkAuth()" value="submit">
   </body>
   </html>

现在,当我按下按钮时,它将激活test.js中的checkAuth()函数,该函数将通过使用AJAX从服务器端(该死的php)检索SESSION中的值['name']:

 function checkAuth()
 {
       var xmlhttp;
       if (window.XMLHttpRequest)
       {// code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
       }
       else
       {// code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
       }
              xmlhttp.onreadystatechange=function()
       {
       if (xmlhttp.readyState==4 && xmlhttp.status==200)
       {
          var response = xmlhttp.responseText;
          document.getElementById("para").innerHTML = response;
       }
   }
    xmlhttp.open("POST","damn.php",true);
    xmlhttp.send();
 }

现在damn.php看起来是这样的:

       <?php
          session_start();
          if (isset($_SESSION['name'])) {
                   echo $_SESSION['name'];
          }

我的问题是,最简单的方法是向客户端显示里面的项目$SESSION就是这样?

有没有一种不使用javascript的更简单的方法?在每一页中插入session_start()是否正确?还是仅从我想要检索SESSION['items']的页面?

您可以简单地使用

<?php
session_start();
$_SESSION['name'] = 'foo';
?>
<script type="text/javascript">
var name = <?php echo json_encode($_SESSION['name']) ; ?>;
</script>

如果你知道你需要在网页中使用特定的会话数据,并且这些数据在你生成页面时是可用的,那么就嵌入这些数据。您唯一想调用AJAX来获取数据的时候是,您认为会话中的数据可能在javascript代码中真正需要之前已经更改。

如果要使用$_SESSION保存/检索数据,则任何位置都需要session_start()。如果某个特定页面不需要修改或访问会话数据,那么您根本不需要session_start()