Php 成功登录后如何重定向到引用页面/url?
我知道这个主题以前在Stack上已经讨论过了,我已经看过了一些答案,但是我还是有点卡住了,因为我对PHP还比较陌生。我网站上的每个页面都需要登录,因此用户在页面加载时会被重定向到登录页面。在每一页的顶部,我有:Php 成功登录后如何重定向到引用页面/url?,php,session,redirect,login,Php,Session,Redirect,Login,我知道这个主题以前在Stack上已经讨论过了,我已经看过了一些答案,但是我还是有点卡住了,因为我对PHP还比较陌生。我网站上的每个页面都需要登录,因此用户在页面加载时会被重定向到登录页面。在每一页的顶部,我有: <? require("log.php"); include_once("config.php"); include_once("functions.php"); ?> 在页面顶部(在“require”(“log.php”);)添加以下内容: if(isset($_SE
<?
require("log.php");
include_once("config.php");
include_once("functions.php");
?>
在页面顶部(在“require”(“log.php”);)添加以下内容:
if(isset($_SESSION['url']))
$url = $_SESSION['url']; // holds url for last page visited.
else
$url = "index.php"; // default page for
转到我的登录页面,并在成功登录时使用以下URL进行重定向:
header("Location: http://example.com/$url"); // perform correct redirect.
我不是100%存储引用URL的代码应该放在log.php或login.php的顶部
我尝试将其添加到这两个页面中,但登录页面只是在我输入用户名和密码后循环
我想知道是否有人能帮我把这件事做好
谢谢
尼克看来我没有权利对你的帖子发表评论,所以我会尽我所能回答。我为所有的情况道歉,我只是一时兴起,尽我所能回答 情景1: 如果您真的没有在代码中选择数据库(如本文所示),这可能是您的问题吗?请注意,下面的代码就是您发布的代码
$db = mysql_select_db(""); //put your database name in here
情景2:
下面的代码不是我在构建的任何东西中使用过的代码,我是否可以建议您尝试用下面的代码行替换该代码行
if(session_is_registered("name") == false) { // Current
if(isset($_SESSION['name']) == false) { // Potential Replacement
情景3:
如果您对以下内容感兴趣,则login.php文件中也存在该逻辑。。。这可能是你的问题。在访问您的站点时,我注意到您的表单出现在login.php上,而您的逻辑是发布到log.php。我希望这段代码有助于排除“跳转”,因为login.php可能会保存自己并覆盖您建立的$\u会话变量
session_start(); // starts the session
$_SESSION['url'] = $_SERVER['REQUEST_URI'];
如果它太复杂而无法从login.php文件中删除,那么如果您已经有了它,我已经整理了一些代码,您可以使用这些代码创建“内部”面包屑,这样您就可以返回历史记录中的两页
if(!isset($_SESSION['internal_breadcrumbs']))
$_SESSION['internal_breadcrumbs'] = array();
$_SESSION['internal_breadcrumbs'][] = $_SERVER['REQUEST_URI'];
$max_breadcrumbs = 5;
while(count($_SESSION['internal_breadcrumbs']) > $max_breadcrumbs)
array_shift($_SESSION['internal_breadcrumbs']);
这将创建一个最大值为$max_breadcrumbs元素的数组,最后是您最近的页面,如下所示
Array
(
[internal_breadcrumbs] => Array
(
[0] => /other_page.php
[1] => /other_page.php
[2] => /other_page.php
[3] => /user_page.php <-- desired page
[4] => /login.php <-- most recent page
)
)
祝您一切顺利,我当然希望这在某种程度上有所帮助。在场景4中
从客户端测试ajax XMLHttpRequest使用javascript代码要求的登录名/密码到专用脚本进行验证(在https模式下进行验证以确保安全)
如果响应正确,请将登录密码发送到脚本服务器
Stips:编码密码更安全 使用header()函数是个坏主意
说明书说明说
记住,必须在调用任何实际输出之前调用header()
通过普通HTML标记、文件中的空行或PHP发送。
使用include或require读取代码是非常常见的错误,
函数或其他文件访问函数,并具有空格或空
在调用header()之前输出的行。同样的问题
使用单个PHP/HTML文件时存在
因此,在您的情况下,我建议只在会话中使用ID为generate的cookie,在第一次连接时,它会生成cookie,cookie的持续时间可能只有2到10分钟
每次调用loging.PHP时重新生成cookie
祝您有愉快的一天FYI,您对SQL注入非常开放,如果您还没有被注入,您将被黑客攻击。学习使用PDO进行准备好的查询以完全避免此问题。为什么在其他页面中需要log.php?我相信请求URI看起来类似于
/page.php
,因此您可能需要调整标题
字符串。尝试执行die(print$\u SERVER['REQUEST\u URI'];
以查看它得到的值。另外,执行die(print\r($\u SESSION));
以查看会话的外观like@manyxcxi谢谢。REQUEST\u URI确实返回/page.php,因此我相应地调整了标题。$\u SERVER['REQUEST\u URI']
返回上一页,在本例中为/2011.php
,打印($\u SESSION)
返回数组([url]=>/2011.php)
。但是,我仍然得到循环。在所有SESSION\u启动()之前,您是否有SESSION\u名称(“MyLogin”)
;
calls?谢谢Bryan。我已将login.PHP中的所有PHP代码添加到原始问题中,以防有助于排除故障。我现在不在家,无法正确更改任何代码和测试,但今天晚些时候会这样做。没问题!我所有的场景都是基于我从代码中得出的假设,我真的希望是这样其中一项将帮助您解决问题:)
if(session_is_registered("name") == false) { // Current
if(isset($_SESSION['name']) == false) { // Potential Replacement
session_start(); // starts the session
$_SESSION['url'] = $_SERVER['REQUEST_URI'];
if(!isset($_SESSION['internal_breadcrumbs']))
$_SESSION['internal_breadcrumbs'] = array();
$_SESSION['internal_breadcrumbs'][] = $_SERVER['REQUEST_URI'];
$max_breadcrumbs = 5;
while(count($_SESSION['internal_breadcrumbs']) > $max_breadcrumbs)
array_shift($_SESSION['internal_breadcrumbs']);
Array
(
[internal_breadcrumbs] => Array
(
[0] => /other_page.php
[1] => /other_page.php
[2] => /other_page.php
[3] => /user_page.php <-- desired page
[4] => /login.php <-- most recent page
)
)
// I'm doing - 2 to accommodate for zero indexing, to get 1 from the current page
if(isset($_SESSION['internal_breadcrumbs']))
$url = $_SESSION['internal_breadcrumbs'][count($_SESSION['internal_breadcrumbs']) - 2];
else
$url = "index.php"; // default page for