[英]PHP Redirection Not Working After Cookie is Set
由於我沒有收到任何標頭設置錯誤,因此如何解決PHP中的“標頭已發送”錯誤無法解決該問題。 正在設置cookie,問題是鏈接轉到主頁('/')。 它似乎不再進入主頁,甚至在跟蹤日志上也看不到,我看不到正在重新加載spash.php的條目。 它幾乎就像從index.php重定向后(輸入http:// domain時 )一樣,瀏覽器/服務器將http://domain/splash.php識別為主頁。
我有2頁,index.php和spash.php。 index.page首先檢查經過身份驗證的cookie。 如果為false或未找到,則頁面重定向到splash.php spash.php,然后設置經過身份驗證的cookie並使用帶有“ /” href值的錨標記。 但是單擊鏈接按鈕后,該頁面僅重新加載spash.php。
我在日志的2頁上添加了跟蹤error_logs,從日志中可以看到,第一次加載時,它會通過index.php頁,然后加載spash.php頁,但是即使在多次單擊鏈接按鈕之后,也不會不再訪問index.php頁面的日志。
這是我的代碼:
的index.php
<?php if(!isset($_COOKIE['authenticated'])){
error_log("This is Index, Redirect to Splash Page");
header("Location: /splash.php" );
die();
exit();
}else{
echo "meron";
}
?>
<html>
<head>
<title>Index Page</title>
</head>
<body>
<h1>Hello</h1>
<?php var_dump($_COOKIE); ?>
</body>
</html>
splash.php
<?php setcookie('authenticated', 1, 0, '/');
error_log("This is Splash, set the cookie");
echo $_SERVER['SCRIPT_FILENAME'];
?>
<html>
<head>
<title>Splash Page</title>
</head>
<body>
<a href="/">GO!</a>
</body>
</html>
注意:
加載啟動頁面后,如果鍵入[domain] /index.php,則可以看到主頁。
此問題僅在主機上發生,在本地嘗試過代碼,一切正常
如果我從spash.php( GO! )更改鏈接按鈕的href,則它可以正常工作。 但是我需要該值才是領域。
使用header
位置時,之前不應有任何echo
或空格。
確定,我找到了間接解決方案。 我沒有使用服務器端代碼(PHP)的重定向功能,而是使用了javascript,現在可以正常工作了。
請參閱下面的更新代碼:
的index.php
<html>
<head>
<title>Index Page</title>
<script>
document.addEventListener('DOMContentLoaded', onLoad());
function onLoad(){
if(getCookie('astig') == ''){
window.location.href = "/splash.php";
}
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
</script>
</head>
<body>
<h1>Hello</h1>
<?php var_dump($_COOKIE); ?>
</body>
spash.php
<html>
<head>
<title>Splash Page</title>
<script>
document.addEventListener('DOMContentLoaded', onLoad());
function onLoad(){
document.cookie = "astig=true;0;path=/";
}
</script>
</head>
<body>
<a href="http://laviel.rocks">GO!</a>
</body>
在托管提供商的支持下獲得了解決方案。 他禁用了mod過期緩存。 現在,我可以通過純服務器端腳本進行重定向了。
只是不確定此選項的總體效果以及哪種方法會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.