简体   繁体   English

PHP脚本仅在Safari中不起作用(仅在线-在本地进行测试)

[英]Php script not working in Safari only (online only - it works locally for testing)

This script works in all browsers but not Apple Mac or Windows Safari. 该脚本适用于所有浏览器,但不适用于Apple Mac或Windows Safari。 It works on same machines in Chrome. 它可以在Chrome的同一台计算机上使用。 It works in other browsers. 它可以在其他浏览器中使用。 iOS no problem. iOS没问题。 It works in localhost too with Safari - just not on line! 它也可以与Safari一起在localhost中使用-只是不在线! - Mac Safari: login happens and the user stays briefly (milliseconds) on index.php but immediately gets sent back to login page... -Mac Safari:发生登录,并且用户在index.php上停留了很短的时间(毫秒),但立即被发送回登录页面...

login_do.php below... 下面的login_do.php ...

<?php
if ($_SERVER['REQUEST_METHOD']=='POST')
    {
        require ('includes/connect_db.php');
        require ('login_tools.php');
        list ($check,$data)=validate($con,$_POST['username'],$_POST['pass']);
        if ($check)
            {session_start();
                $_SESSION['user_id']=$data['user_id'];
                $_SESSION['username']=$data['username'];
                $_SESSION['admin']=$data['admin'];
                load ('index.php');
            }
        else {$errors=$data;}
        mysqli_close($con);
    }
include ('login.php');
?>

Why? 为什么?

This is the login.php that POSTs to the above script. 这是POST到上述脚本的login.php。

<?php
$page_title='Login';
include ('includes/header.html');?>
<link rel="stylesheet" type="text/css" href="handover.css">
<?php 
if (isset($errors) && !empty($errors))
{
echo'<p id="err_msg">Oops! There was a problem:<br>';
foreach ($errors as $msg)
{
echo "- $msg<br>";
}
echo 'Please try again or <a href="help.php">Ask for help</a></p>';
}
?>
<div id="middler">
<h2>
<form action="login_do.php" method="POST">
<p>
User name: <input type="text" name="username"></p>
<p>
Password: <input type="password" name="pass"></p>
<p>
<input type="submit" name="Login"value="Login"></p>
</form>

</div>
<?php 
include ('includes/logoutfooter.html')?>

The index.php that the login lands on briefly... 登录短暂登陆的index.php ...

<?php 
session_start();
if (isset($_SESSION['username']))
{
    $screenname=$_SESSION['username'];
}
if (isset($_SESSION['admin']))
{
    $admincheck=$_SESSION['admin'];
}

else {$url = 'login.php';
    echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';}
?>

And finally: login_tools.php 最后:login_tools.php

<?php
function load ($page = 'login.php')
{
$url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url=rtrim($url,'/\\');
$url.='/'.$page;
header("Location: $url");
exit();
}
function validate($con,$email='' , $pwd = '')
{
$errors=array();
if (empty($email))
{$errors[]='Enter your user name.';}
else
{$e=mysqli_real_escape_string($con,trim($email));}
if (empty($pwd))
{$errors[]='Enter your password.';}
else
{$p = mysqli_real_escape_string($con,trim($pwd));}

if (empty($errors))
{
$q="SELECT user_id, username, admin
FROM DPLA.users
WHERE username='$e'
AND password='$p'";
$r=mysqli_query($con, $q);
if (@mysqli_num_rows($r)==1)
{$row=mysqli_fetch_array($r,MYSQLI_ASSOC);
return array(true,$row);
}
else
{$errors[]='username and password not found.';}
}
return array(false, $errors);
}

Your else clause that emits the meta-refresh that redirects to login.php is only attached to the $_SESSION['admin'] check. 发出重定向到login.php的元刷新的else子句仅附加到$_SESSION['admin']检查。 So any non-admin will be redirected back, even if $_SESSION['username'] is set. 因此,即使设置了$_SESSION['username'] ,任何非管理员都将被重定向回。 Change it to: 更改为:

<?php 
session_start();
if (isset($_SESSION['username']))
{
    $screenname=$_SESSION['username'];
    if (isset($_SESSION['admin']))
    {
        $admincheck=$_SESSION['admin'];
    }
} else {
    $url = 'login.php';
    echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';
}
?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM