【问题标题】:Session is saved when page load is triggered by PHP, but not when triggered by Javascript页面加载由 PHP 触发时保存会话,但在 Javascript 触发时不保存
【发布时间】:2018-05-12 21:55:41
【问题描述】:

我正在使用 cURL 登录网站。 [编辑:他们设置 cookie 并生成令牌。我抓住他们的令牌。用它做一些计算并登录。这就是保持会话打开很重要的原因。] 我有一个文件可以加载另一个文件。这是在 PHP 中的:

file1.php

<?php
session_start();
$_SESSION['var'] = $var;

header("Location: file2.php");

?>

file2.php

<?php
session_start();

$var = $_SESSION['var'];

?>

这可行,但是,我必须使用 Javascript 进行一些计算,然后使用 GET 将这些变量传递给 file2.php(并且有一个变量是会话变量)。所以:

file1.php

<?php
session_start();
$_SESSION['var'] = $var;
?>
<script type="text/javascript">
var var1 = 'car';
window.location = "file2.php?var1=" + var1;
</script>

file2.php

<?php
session_start();
$var1= $_GET['var1'];
$var2 = $_SESSION['var'];
?>

我试过window.location.href 而不是window.location 我还尝试使用document.cookie 并尝试将cookie(使用setcookie("PHPSESSID", [string])设置为存储在PHPSESSID 中的内容(其他变量——JSESSIONID 和session_id——都是NULL)。我尝试将其设置为整个字符串。

我试过了

session_name('login_session');
session_set_cookie_params(0, '/');
session_start();

我在这里找到的:https://stackoverflow.com/a/5438521。在两个页面上的脚本开头。

我还在 file1.php 中的 php 脚本末尾尝试了session_write_close();


更新。我一直在阅读并认为如果我使用 Ajax/jquery,我也许可以让它工作。我试过了:

file1.php

<html><head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
</script>
</head></html>

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

<script type="text/javascript">
var var1 = 'car';

 function runLogin() {  
 $.ajax({  
 <strike>type: "GET",</strike>
 type: "POST",  
 url: "file2.php",  
 <strike>data: "var="+var1</strike>
 data: {'var': var1}
 });  
 }

 runLogin();
</script>

file2.php

<?php
session_start();
<strike>$var1= $_GET['var1'];</strike>
$var1 = $_REQUEST;
$var2 = $_SESSION['var'];
?>

但会话仍然丢失。我第一次运行它时,我做了上面的事情。第二个我在 session_start() 下的 file1.php 中添加了include_once('file2.php');,在 file2.php 中添加了相反的内容


已解决:

file1.php

<?php
$session = session_id();
$_SESSION['var'] = var;
?>
<script type="text/javascript">
var var1= "<?=$session ?>";

function runLogin(session) {  
 $.ajax({  
type: "POST",  
url: "file2.php",  
data: {'session': session}
 });  
}

runLogin(var1);

</script>

file2.php

<?php 
$posted = $_REQUEST;
$sew = $posted['session'];
session_id($sew);
session_start();

$var = $_SESSION['var'];
?>

我搜索了我的历史记录,但找不到我发现这个想法的页面。

【问题讨论】:

  • 您可能需要添加window.init = 'myfunction',然后在myfunction 内进行变量设置和重定向...
  • 我怎样才能使会话保持活动状态?
  • 保存会话 ID,然后使用 jquery 将其传递到新页面。

标签: php javascript jquery session cookies


【解决方案1】:

您在变量中缺少$$_SESSION['var'] = var;var var1; 永远不会设置

file1.php

<?php
session_start();
$_SESSION['var'] = 'your_var_value';
?>
<script type="text/javascript">
window.location = "file2.php?var1=<?php echo $_SESSION['var'];?>";
</script>

file2.php

<?php
session_start();
$var1 = (isset($_GET['var1'])?$_GET['var1']:null);
$var2 = (isset($_SESSION['var'])?$_SESSION['var']:null);
?>

【讨论】:

  • 没有。我刚刚检查了我的代码。以上只是一个较短/改进的版本。
【解决方案2】:

但这不是一个很好的跟进和becarfull初始化一些值到$var

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

<script type="text/javascript">
var var1 = "<?php echo $_SESSION['var']; ?>";
window.location = "file2.php?var1=" + var1;
</script>

【讨论】:

    【解决方案3】:

    您正在使用 cURL 访问 file1.php? cURL 不包含 Javascript 解释器,因此不会执行任何 Javascript。

    【讨论】:

    • 没有。在 file1 中,我使用 cURL 抓取带有令牌的页面,并使会话保持打开(未关闭)。然后我进行计算(Javascript)。在文件 2 中,我使用登录凭据发布。
    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2012-05-05
    • 2014-09-11
    • 2013-10-17
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多