如何将JavaScript变量存入PHP Session并跨页面调用?
问题:如何将JavaScript变量存入PHP Session并在其他页面读取
我尝试在index.php存储Session变量,在I_detail.php访问,直接写固定值的代码能正常运行:
可正常运行的代码
index.php
<script type="text/javascript"> function loadpage(a) { //var b = a; <?php $_SESSION['p_id'] = 'asdfasdfasfd'; // 这段能正常工作 ?> document.location.href='I_detail.php'; } </script>
I_detail.php
<?php echo "{$_SESSION['p_id']}<br />"; ?>
但尝试把JavaScript变量的值存入Session时失败,代码如下:
<script type="text/javascript"> function loadpage(a) { var b = a; <?php $_SESSION['p_id'] = '<script>document.write(b)</script>'; // 这段无法正常工作 ?> document.location.href='I_detail.php'; } </script>
问题原因
PHP是服务器端语言,在页面发送到浏览器之前就已经执行完毕;而JavaScript是客户端语言,只有页面加载到浏览器后才会运行。你写的代码里,PHP代码执行时,JavaScript变量b还根本不存在,所以直接把JS代码塞进Session里毫无意义——Session里存的只是一段字符串,不会被浏览器执行后再赋值。
解决方案
方案1:用AJAX将JS变量传给服务器存Session
通过AJAX请求把JS变量发送到一个PHP脚本,在脚本里完成Session的存储,请求成功后再跳转页面。
步骤1:创建save_session.php
<?php session_start(); if(isset($_POST['p_id'])){ $_SESSION['p_id'] = $_POST['p_id']; echo "success"; } ?>
步骤2:修改index.php的JS函数
<script type="text/javascript"> function loadpage(a) { var b = a; // 用fetch发送POST请求 fetch('save_session.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: 'p_id=' + encodeURIComponent(b) }) .then(response => response.text()) .then(data => { if(data === 'success'){ document.location.href='I_detail.php'; } }) .catch(error => console.error('Error:', error)); } </script>
方案2:通过URL参数传递,在目标页面存Session
如果不需要提前存Session,也可以把JS变量作为URL参数带到I_detail.php,在目标页面直接读取参数并存入Session。
修改index.php的JS函数
<script type="text/javascript"> function loadpage(a) { var b = a; // 把变量作为URL参数传递 document.location.href='I_detail.php?p_id=' + encodeURIComponent(b); } </script>
修改I_detail.php
<?php session_start(); // 如果URL有p_id参数,就存入Session if(isset($_GET['p_id'])){ $_SESSION['p_id'] = $_GET['p_id']; } echo "{$_SESSION['p_id']}<br />"; ?>
内容的提问来源于stack exchange,提问作者Nadeem Learning Center -Online
相关产品推荐
相关产品推荐

