重定向时修改PHP会话

重定向时修改PHP会话,php,session,redirect,Php,Session,Redirect,我遇到了一个奇怪的问题,由于某种未知的原因,我的$\u SESSION['last\u uri']变量在js重定向上被修改 这是我们定义会话变量的地方,当前它显示为“/training\u management”: echo 'SESSION: ' . $_SESSION['last_uri']; if ( !(preg_match('/login/', $_SERVER['SCRIPT_NAME'])) && !(preg_match('/denied/', $_

我遇到了一个奇怪的问题,由于某种未知的原因,我的$\u SESSION['last\u uri']变量在js重定向上被修改

这是我们定义会话变量的地方,当前它显示为“/training\u management”:

echo 'SESSION: ' . $_SESSION['last_uri'];

if ( !(preg_match('/login/', $_SERVER['SCRIPT_NAME'])) && !(preg_match('/denied/',       $_SERVER['SCRIPT_NAME'])) ) {
    $_SESSION['last_uri'] = $_SERVER['REQUEST_URI'];
这是我们重定向到新页面的地方:

$("#login_button").click(function() {
    var name = $("input[name$=name]").val();
    var pw = encodeURIComponent($("input[name$=password]").val());
    var query = "func=login&name=" + name + "&password=" + pw;
    ajaxRequest(query, function(data) {
        console.log(data);
        data = data.replace(/(\r\n|\n|\r|\s)/gm, "");
        if (!data || data == 0) {
            failureMsg(_("Incorrect login data."));
        } else {
            window.location.replace("redirect");
        }
    });
});
然后重定向到redirect.php,其中显示值“/tpl/css/images/ui-icons_2222_256x240.png”:

if ( $_SESSION['last_uri'] ) {
    echo $_SESSION['last_uri'];

    //header("Location: " . $_SESSION['last_uri']);
}
SESSION变量在何处/如何更改

以下是我的重写规则:

# No www
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# No likey .php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

# Some more Security
RewriteEngine On
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ /security [R=301,L]
#没有www
重新启动发动机
重写基/
重写条件%{HTTP_HOST}^www\.(.*)$[NC]
重写规则^(.*)$https://%1/$1[R=301,L]
#没有likey.php
重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}\.php-f
重写规则^(.*)$$1.php
#更多的安全措施
重新启动发动机
重写cond%{QUERY_STRING}proc/self/environ[或]
重写cond%{QUERY\u STRING}mosConfig\[a-zA-Z\]{1,21}(\\%3D)[或]
RewriteCond%{QUERY_STRING}base64_encode.*(.*)[或]
重写cond%{QUERY_STRING}(|%3E)[NC,或]
重写条件%{QUERY\u STRING}全局(|[|\%[0-9A-Z]{0,2})[或]
重写条件%{QUERY\u STRING}{u请求(|[|\%[0-9A-Z]{0,2})
重写规则^(.*)$/security[R=301,L]

这可能就是发生的情况(请参见评论):

其他可能性:

  • /未找到tpl/css/images/ui-icons_22222_256x240.png重定向到修改会话的PHP页面
  • 缺少会话\u start()

您是否在使用url重写?看起来您重写得有点太多了。如果您让mod_rewrite将所有请求重写到一个PHP脚本,那么点击特定页面可能会触发一系列重写:一个用于实际页面,另一个用于该页面上的所有外部资源(例如图像、css、js)。在postdirect.php中添加的重写规则不会加载header.php,其中包含$_SESSION['last_uri']的定义是的,但在设置变量之前,您使用echo测试变量,因此测试可能会出错。tail SESSION_log last_uri|s:53:“/tpl/css/images/ui-bg_inset-hard_100_fcfd||1x100.png”;last|uri:43:20::“/培训”管理“最后一个uri”s:43:::“//tpl/css/图像/图像/培训”管理“最后一个uri”s:20:::::::“/培训”管理“最后一个uri”s:20::::“/培训”管理“最后一个uri”s:20::::::“//培训”管理“最后一个”s:20::::::::::“/////培训”管理“最后一个管理”管理“最后一个”图像/视频视频视频视频视频视频视频视频视频视频视频视频:“/视频视频视频视频视频/图像/图像/图像/图像/图像/图像/图像/图像/图像/图像/图像/图像/图像/视频视频视频视频视频视频视频视频视频视频视频视频视频视频/界面界面界面图标图标图标图标图标图标图标。图标图标图标图标。图标图标图标图标。图标。2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2/| s:13:“马修斯·哈里斯“登录i:1;审计员id:4:“3042”;访问级别s:1:“6”;
echo 'SESSION: ' . $_SESSION['last_uri']; // display /training_management

if ( !(preg_match('/login/', $_SERVER['SCRIPT_NAME'])) && !(preg_match('/denied/',       $_SERVER['SCRIPT_NAME'])) ) {
    $_SESSION['last_uri'] = $_SERVER['REQUEST_URI'];
    echo 'NEW SESSION: ' . $_SESSION['last_uri']; // display /tpl/css/images/ui-icons_222222_256x240.png
}