用户可以在不登录的情况下访问个人资料页面吗?

时间:2015-09-02 04:35:57

标签: php session

登录页面的代码

<?php

$connect = mysqli_connect("localhost" , "root" , "");
mysqli_select_db($connect , "mysqli");
if(isset($_POST['submit'])){
    $username = mysqli_real_escape_string($connect , $_POST['username']);
    $password = mysqli_real_escape_string($connect , $_POST['password']);
    if($username and $password){


    $query = mysqli_query($connect , "SELECT * FROM users WHERE username LIKE '$username' AND password LIKE '$password'");
    $check = mysqli_num_rows($query);
    if($check > 0){
        $_SESSION['username'] = $username;
        $_SESSION['password'] = $password;
        echo "<script>window.open('profile.php' , '_self')</script>";
    }
    else{
        echo "<script>alert('Wrong username or password')</script>";
    }
    }
    else{
        echo "<script>alert('Please enter all fields')</script>";
    }
}


?>

个人资料页面的代码

<?php
session_start();

if($_SESSION['username'] or $_SESSION['password']){
    $username = $_SESSION['username'];

?>

<marquee><font size="20">Welcome To A.S Service <?php echo "" . $_SESSION['username'];?> :)</font></marquee>
<?php
}
else{
    header("header:main.php?notify=Oops Something Went Wrong!!!");
}
?>

注销过程的代码

<?php
session_start();
if($_SESSION['username'] or $_SESSION['password']){
    session_destroy();
    header("location:main.php?notify=Now You're Logged Out");
}

我做了一个登录表单...但我对某些内容感到困惑。用户的个人资料页面是一个由&#34; profile.php命名的普通页面&#34; ...所以当我在互联网上发布我的网站我不希望他在没有登录的情况下通过域名(网址)访问个人资料页面...那么我的代码是否会保护它并保持安全?!...谢谢

3 个答案:

答案 0 :(得分:0)

除非您的profile.php文件本身存在检查用户是否经过身份验证的内容,否则会强制重定向,如果他不是。

保护您网站的最佳方法是在每个需要授权查看的php文件的开头加入验证。否则,恶意用户理论上可以直接请求页面(或脚本或模板的一部分等)(即输入URL而不是链接)并查看他喜欢的任何页面。

更好的是:编写一个用于检查身份验证的php脚本,并在必要时编写include。例如:

<?php

session_start();
if (!$_SESSION['username']) {
    header('Location:login.php');
}

?>

答案 1 :(得分:0)

该代码的最大问题实际上是p header("header:main.php?notify=Oops Something Went Wrong!!!"); - 注意单词header("Location: main.php?notify=Oops Something Went Wrong!!!");以及Location和超链接之间的空格。

至于您的代码本身,您有正确的想法 - 登录的行为会在:中生成令牌,例如{{ 1}}凭据和$_SESSION页面随后以username启动页面并立即检查是否存在令牌,否则重定向用户

我建议将此代码段放在页面顶部 - 不要像你那样将HTML包装在PHP中,因为它会很快变得无法管理:

all

答案 2 :(得分:0)

header:main.php附近有无效参数。

改变
header("header:main.php?notify=Oops Something Went Wrong!!!");

header("location:main.php?notify=Oops Something Went Wrong!!!");
  

使用以下示例代码

profile.php中添加检查
<?php
session_start();

if(!isset($_SESSION['username']) || $_SESSION['username'] == null)
{
    header("Location: login.php");
}

为什么要在会话中存储password

$_SESSION['username'] = $username;
$_SESSION['password'] = $password;

最好在会话中存储usernameuserid,而不是存储密码。