Javascript 在两个php页面之间传递变量的最佳方法

Javascript 在两个php页面之间传递变量的最佳方法,javascript,php,jquery,Javascript,Php,Jquery,需要将变量从index.php传递到edit.php 该变量对于访问者来说应该是不可见的,因此不允许使用地址栏 第一种方法-在index.php上使用带有action属性的表单-edit.php 使用表单的问题是每次刷新edit.php时都会出现关于重新提交的警告 第二种方法-在index.js上使用ajax调用来更改php端的会话变量 使用ajax的缺点是一个额外的路径-首先转到服务器端(更改php)-然后转到客户端(获取新值的成功函数)-再次转到服务器端(使用新变量转到edit.php) 正

需要将变量从
index.php
传递到
edit.php

该变量对于访问者来说应该是不可见的,因此不允许使用地址栏

第一种方法-在
index.php
上使用带有
action
属性的表单-
edit.php

使用表单的问题是每次刷新
edit.php
时都会出现关于重新提交的警告

第二种方法-在
index.js
上使用ajax调用来更改php端的会话变量

使用ajax的缺点是一个额外的路径-首先转到
服务器端
(更改php)-然后转到
客户端
(获取新值的成功函数)-再次转到服务器端(使用新变量转到
edit.php

正确的方法是什么

有没有这样一个简单的方法:


location.href='edit.php',设置x=5

然后在
edit.php
上获取以下信息:


echo$x
(结果5)

另一种方法是使用PHP会话

//index.php
$_SESSION['varname'] = $var_value;

//edit.php
$var_value = $_SESSION['varname'];

记住运行
会话_start()
;在您尝试访问$\u会话数组之前,以及在将任何输出发送到浏览器之前,请在这两个页面上执行语句。

如果参数必须在UI中保持不可见(即,不在地址栏中),并且您需要避免由于页面重新加载而导致的POST请求,则可以通过两个请求来实现这一点

一篇AJAX文章然后一篇GET,即

fetch('set-session-var.php'{
方法:“post”,
正文:“x=5”,
标题:{
“内容类型”:“应用程序/x-www-form-urlencoded”
}
})。然后(res=>{
如果(res.ok){
window.location='edit.php'
}
})
或使用一种模式,如

//set-session-var.php
会话_start();
$_SESSION['x']=$_POST['x'];
标题('Location:edit.php');//如果使用AJAX版本,请忽略此项

您可以在
index.js
中创建自定义cookie,并将其附加到
document.cookie
中,当请求
编辑.php
时,该cookie将可用

index.js

const custom_cookie = "x=5";
document.cookie = custom_cookie;
.....
window.location = 'edit.php';
edit.php

$cookie_name = 'x';
echo $_COOKIE[$cookie_name]
使用Cookie

index.php:

setcookie("x", 5);
edit.php:

echo $_COOKIE["x"];

第三种方式-会话。
location.href='edit.php?x=5'
?当然,页面必须读取当前URL的当前“搜索”属性并处理x=5@u_mulder,您可能是指我的帖子中的
second-way
?@JaromandaX,地址栏不允许,请重新阅读帖子,plsPost、Get、Ajax、Session、Cookie是控制台中所有可见的内容,如果你想让访问者看不到,那么加密和发送开始我不在服务器端,但在客户端你说你的文件是index.php和edit.php,那么你在服务器端的文件当然不是,
index.php
加载到本地公司的是客户端。你如何运行index.php文件?你有任何Xampp或Wamp吗?@Khalilop说
x
值来自客户端,因此PHP解析
index.PHP
时不知道。只有在呈现页面后,浏览器才知道cookie,但用户可以看到cookie。这是OP的要求(不可见)。@Andreas我感觉OP意味着在UI(即地址栏)中不可见。设置新的cookie值时,您不需要在现有cookie值前面加前缀。真奇怪。哦,我的错。更新it.OP在另一条评论中说。。。“一开始我不在服务器端,而是在客户端”,所以他们不能使用PHP的
setcookie()