重定向系统中的 cookie 令人困惑

2023-11-22

我从事 PHP 工作。我想在登录后将页面重定向到我想访问的最后一个页面,但 5 小时后我仍然堆在这里,但我仍然没有成功。这是架构,我有 3 个 php 文件。

newest.php (before login), 
signin.php (before login), 
thread.php (after login). 

我正在使用 cookie 进行此重定向。首先我转到最新的.php,然后单击按钮(转到 thread.php)。然后thread.php看到你还没有登录,然后重定向到signin.php。在我填写登录表单后,我单击了提交按钮(signin.php),然后我在signin.php处堆栈(不会去任何地方)即使在我登录后,它应该转到thread.php自动地。

这是我在latest.php & thread.php 中的代码(不在signin.php 中):

$coopage='coopage';
$current_page='http://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];
setcookie($coopage, $current_page,time()+86400,'/');

latest.php 中的提交按钮(转到 thread.php):

echo "<center><button onclick=\"window.location='/thread/form'\">add new thread</button></center>"; 

在signin.php中(在我单击提交按钮后或在提交区域中,因为表单和提交后我在同一页面中制作)(在页面底部):

if(isset($_COOKIE[$coopage])){
    $url=$_COOKIE[$coopage];
    unset($_COOKIE[$coopage]);
    header('location:'.$url);
}

注意:在signin.php中,我在这个cookie之前还设置了另一个cookie,这是原因吗?或者我在一页中设置 2 个 cookie 有什么关系吗?另一种cookie设置是这样的(在页面顶部)

$cooval2='juna';
setcookie($coousername, $cooval2, time() + (3600 * 24 * 365), "/"); // 1 year

我根本不会使用cookies。

Method 1

一种可能的方法是将访问的链接存储到会话变量中,然后当用户到达 login.php 页面时,提供到会话变量给出的 $url 的标头重定向。

将此代码粘贴到网站或主容器上的所有页面中。

<?php
session_start(); 
$_SESSION['url'] = $_SERVER['REQUEST_URI']; 

对于登录页面,您可以有:

<?php
session_start();  // needed for sessions.
if(isset($_SESSION['url'])) 
   $url = $_SESSION['url']; // holds url for last page visited.
else 
   $url = "student_account.php"; 

header("Location: http://example.com/$url"); 

Method 2

到目前为止,一个更简单的解决方案就是:

<hidden name="redirurl" value="<? echo $_SERVER['HTTP_REFERER']; ?>" />

然后在他们登录后重定向到该地址。

但是,只有当每个页面上都有登录框时,这才有用。

$_SERVER['REQUEST_URI']将仅保留当前页面。你想做的是使用$_SERVER['HTTP_REFERER']。 因此,将 HTTP_REFERER 保存在表单上的隐藏元素中,但还要注意,在处理表单的 PHP 中,您将需要一些逻辑,以便在登录失败时重定向回登录页面,同时还要检查引用者是否实际上是您的网站,如果不是,则重定向回主页。

Method 3

另一种常见的方法是通过 $_GET 变量将用户的当前页面传递到登录表单。

更改您的脚本,以便也告诉登录页面记住您所在的位置:

Note: $_SERVER['REQUEST_URI']是您当前的页面

header("Location:login.php?location=" . urlencode($_SERVER['REQUEST_URI']));

现在检查它是否已填充,然后将用户发送到此: 登录.php

echo '<input type="hidden" name="location" value="';
if(isset($_GET['location'])) {
    echo htmlspecialchars($_GET['location']);
}
echo '" />';
//  Will show something like this:
//  <input type="hidden" name="location" value="previousPage.php" />

登录检查.php

session_start();

//  our url is now stored as $_POST['location'] (posted from login.php). If it's blank, let's ignore it. Otherwise, let's do something with it.
$redirect = NULL;
if($_POST['location'] != '') {
    $redirect = $_POST['location'];
}

if((empty($username) OR empty($password) AND !isset($_SESSION['id_login']))) {
    $url = 'login.php?p=1';
    // if we have a redirect URL, pass it back to login.php so we don't forget it
    if(isset($redirect)) {
        $url .= '&location=' . urlencode($redirect);
    }
   header("Location: " . $url);
   exit();
}
elseif (!user_exists($username,$password) AND !isset($_SESSION['id_login'])) {
    $url = 'login.php?p=2';
    if(isset($redirect)) {
        $url .= '&location=' . urlencode($redirect);
    }
   header("Location:" . $url);
   exit();
}
elseif(isset($_SESSION['id_login'])) {
    // if login is successful and there is a redirect address, send the user directly there
    if($redirect)) {
        header("Location:". $redirect);
    } else {
        header("Location:login.php?p=3");
    }
    exit();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重定向系统中的 cookie 令人困惑 的相关文章

随机推荐

  • $.each() jQuery 中的索引起始编号

    如何启动 jQuery each 索引从 1 而不是 0 开始 我正在使用 each 函数来填充选择框 所以在这里 我想从 1 开始填充选择框中的选项 因此 根据条件 我想在第一个索引 即 0 中添加选项 each So try each
  • 无法访问 JD-Eclipse 站点:http://java.decompiler.free.fr/?q=jdeclipse [关闭]

    Closed 这个问题是无关 目前不接受答案 我无法访问java反编译器站点 http java decompiler free fr q jdeclipse 它显示 403 错误 Erreur 403 拒绝 de Traitement d
  • 在视频中的移动物体上叠加图像(增强现实/OpenCv)

    我在用FFmpeg通过此命令在视频上叠加图像 表情符号 i inputfilePath filter complex 0 1 overlay enable between t startTime endTime v1 map v0 map
  • 如何在 SSIS 包中使服务器名称动态化

    我有许多 SSIS 包 它们都连接到同一个数据库 我不想将服务器名称硬编码到每个数据库中的数据库连接中 因为它与开发服务器和实时服务器不同 这些服务器名称可能会随着时间的推移而改变 我知道您可以将其放入配置文件中 但所有这些 SSIS 包都
  • 如何在Windows中用Java快速截取桌面(ffmpeg等)?

    我想使用 java 使用 FFMPEG 或其他解决方案来截取我的机器的屏幕截图 我知道linux可以在没有JNI的情况下使用ffmpeg 但是在Windows中运行它不起作用 并且可能需要 JNI 是否有一些简单的Java类 以及其他任何必
  • 如何使用 Visual Studio 将 Unicode 打印到 C 语言的输出控制台?

    正如问题所说 我必须做什么才能将 Unicode 字符打印到输出控制台 我必须使用什么设置 现在我有这个代码 wchar t text L the 来 wprintf L Text is s n text return EXIT SUCCE
  • 我可以使用 Google Maps API 显示自定义地图吗?

    我所说的自定义地图是指自定义地图图块 例如绘制另一个星球的地图 我环顾四周 但找不到任何资源来指导如何在 Google 或任何网站上执行此操作 我知道这是可能的 因为我以前在网站上看到过这样做 但不幸的是 具有该网站链接的网站已关闭 因此我
  • 虚函数和性能 C++

    在您对重复的标题感到畏缩之前 另一个问题不适合我在这里问的问题 IMO 所以 我真的很想在我的应用程序中使用虚拟函数 让事情变得简单一百倍 这不是 OOP 的全部内容吗 但我在某处读到它们是以性能成本为代价的 除了过早优化的同样老套的炒作之
  • 如何在 C# 中从数据表动态构建插入命令

    我在从 C 中的 dataTable 对象动态创建 SQL 插入语句时遇到一些问题 我想知道实现它的最佳实践 这是我的代码片段 到目前为止我已经尝试过 String sqlCommandInsert INSERT INTO dbo RAW
  • 如何从java启动chrome浏览器

    有没有什么聪明的方法可以从 java 类启动 chrome 浏览器 我问这个问题是因为我想要一种智能方式来启动一个应用程序 该应用程序需要在以 Internet Explorer 作为默认浏览器并安装了 java 1 4 2 的计算机上使用
  • PHP排序最近的坐标

    我在 PHP Web 服务中有一个包含经度和纬度的 MySQL 表 我只想向用户发送 5 个最接近的坐标 我编写了计算从坐标到用户在 POST 请求中发送的坐标的距离的方法 但我不确定如何对其进行排序 并且只发回一些坐标 这是距离方法 fu
  • ASIHTTPRequest 将 json 发送到 php 服务器

    在过去的 5 个小时里 我一直在尝试将 json 对象发布到 PHP 脚本 我已阅读所有文档 看起来代码应该可以工作 但事实并非如此 请求已发出并接收正常 但我无法访问发布的 json 数据 或者甚至不知道它是否已正确发送 我不断收到空的
  • 在 Sitecore 中,当向模板添加字段时,有一个名为“共享”的复选框。这是为了什么?

    这似乎是一个愚蠢的问题 但我在我拥有的 sitecore 文档 在线和离线 中可以找到的最接近的答案是共享字段是 跨语言共享 我认为这意味着共享字段的内容在 sitecore 中该项目的所有翻译中都是相同的 那是对的吗 是的 这是正确的 项
  • 有没有办法将 css 文件附加到 jEditorPane?

    足够简单的问题 我有一个包含 HTML 的字符串 该字符串正在传递给 JEditorPane 供用户使用 我可以附加 CSS 文件 或包含 CSS 规则的字符串 以允许更具体的文本样式吗 The HTMLEditorKit默认情况下查找文件
  • 如何检测行的开头,或者:“当前上下文中不存在名称‘getCharPositionInLine’”

    我正在尝试创建一个行开头标记 lexer grammar ScriptLexer BOL getCharPositionInLine 0 Beginning Of Line token 但上面会发出错误 The name getCharPo
  • 根据jstl中的索引获取arraylist的元素[重复]

    这个问题在这里已经有答案了 这也许是一件相对简单的事情 但由于某种原因我似乎没有做对 如何根据索引从jstl中的arrayList中获取元素 在纯java中 假设我有这个数组列表 ArrayList lt String gt colors
  • 将 MATLAB 图形保存为 PDF,质量为 300 DPI,居中

    我想将 MATLAB 图另存为 PDF 质量为 300DPI 并居中 到目前为止 我设法保存它 但图像似乎被裁剪了 我将页面类型更改为A3并解决了问题 但我正在寻找更优雅的东西 我是通过 GUI 执行此操作 但也许在 MATLAB 中使用命
  • Python 按键和按键释放监听器

    我正在使用 python 代码控制一辆遥控玩具车 截至目前 代码如下 def getkey fd sys stdin fileno old termios tcgetattr fd new termios tcgetattr fd new
  • 开源.NET富文本编辑器UserControl与GUI全部实现[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在编写一个数据输入程序 其中最后一个字段将是一个 RichTextBox 供用户输入备注 并格式化为打印 是否有免费或开源的 NET WinForms 富文本编辑器 并且所有 G
  • 重定向系统中的 cookie 令人困惑

    我从事 PHP 工作 我想在登录后将页面重定向到我想访问的最后一个页面 但 5 小时后我仍然堆在这里 但我仍然没有成功 这是架构 我有 3 个 php 文件 newest php before login signin php before