我在localhost/index.php
上运行了一个应用
在Javascript中,我使用历史记录API:history.replaceState({}, null, "?uid=" + uid);
来更改页面的网址(uid
是一个随机生成的值的变量)。例如,此操作地址更新为localhost/index.php?uid=dqw12312aws
后
然后我尝试通过以下方式在服务器端接收uid
变量:console.log('<?php echo "$_GET[uid]"; ?>');
。
但我获得了意想不到的价值
我对localhost/index.php?uid=dqw12312av
- $_GET[uid]
的第一次请求将是一个空字符串
但我向localhost/index.php?uid=qwtgas23123
提出的第二次请求 - $GET[uid]
将是我第一次请求的值,等于dqw12312aws
,依此类推。为什么会这样?
答案 0 :(得分:1)
你在javascript中使用console.log('<?php echo $_GET["uid"]; ?>');
,对吗? Javascript不在服务器端。 Javascript被浏览器解释。 PHP由服务器解释,I.E。 PHP是服务器端。服务器端意味着当服务器服务器运行服务器端文件时,将解释代码 。 (I.E.页面加载时)。
当您加载PHP文件时,您基本上要求服务器进入该文件,找到任何PHP并执行它。
这意味着,在这种情况下,$_GET['uid']
将包含在加载页面时设置的uid
url-param。所以
当通过javascript动态更改URL时,
$_GET['uid']
不会更改。这是因为:
页面未刷新→ PHP文件无法运行→ PHP代码无法再次评估。
您可以通过使用javascript检索URL查询字符串来解决此问题 E.G。
function getUrlVar(requestedKey) {
var hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
var key = hash[0],
val = hash[1];
if (key === requestedKey) {
return val;
}
}
return false;
}
var uid = getUrlVar("uid");
如果您在浏览器中有此网址:http://localhost/index.php?uid=1234
然后,上面代码中的uid
变量包含1234
在下面的评论中,您问我如何向PHP发送get变量。
要在不刷新页面的情况下运行PHP脚本,您可以使用动态请求。例如。阿贾克斯。
如果您不熟悉网络脚本和javascript,建议您查看jQuery和jQuery.ajax
因此,您将在index.php中包含jQuery并运行此JS代码:
function getUrlVar(requestedKey) {
var hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
var key = hash[0],
val = hash[1];
if (key === requestedKey) {
return val;
}
}
return false;
}
function sendUidToPHP(){
$.post("receiver.php", {uid: getUrlVar("uid")}, function(data){
// The data argument now contains the response from php
// To learn more about this see http://api.jquery.com/jquery.ajax
// and http://api.jquery.com/jquery.post
});
}
receiver.php可以从uid
读取$_POST['uid']
。
还有一件事。如果uid
URL-param是登录其他用户所需的唯一内容,则您的脚本存在巨大安全漏洞。请查看PHP-Cookies和PHP-Sessions