【问题标题】:How to preserve my session in PHP?如何在 PHP 中保存我的会话?
【发布时间】:2017-10-20 15:27:59
【问题描述】:

我正在制作视频门户,所以我有身份验证系统,如果我发表一些评论或图像会话消失。 我得到“未定义的索引:第 2 行 C:\xampp\htdocs\social_site\assets\login.php 中的电子邮件” AND "注意:未定义索引:第 3 行 C:\xampp\htdocs\social_site\assets\login.php 中的密码 ”。

登录.php

<?php
    $email = $_POST['email'];
    $password = $_POST['password'];
    $sql = "SELECT * FROM members WHERE email='$email'";
    $query = mysqli_query($conn, $sql);
    $row = mysqli_fetch_assoc($query);
    $hash_password = $row['password'];
    $hash = password_verify( $password, $hash_password);
    $y = $_session['username'] = $row['username'];
    $x = $_session['id'] = $row['id'];


if (isset($_POST['submit'])) {
  if ($hash == 0) {
    header('location: index.php?fillpassword');
    exit();
  }
  else{
    $sql = "SELECT * FROM members WHERE email='$email' AND password='$hash_password'";
    $result = mysqli_query($conn, $sql);


    if (!$row = mysqli_fetch_assoc($result)) {
      echo "<script>alert('You have no access here. You must login.')</script>";
      header ("Location: ../index.php?erorr=noaccess");
      }
    }
  }


 ?>

main.php

<?php
if ($_SESSION['id'] = $row['id']) {
                  echo "<form method='POST' action='".setComments($conn)."'  enctype='multipart/form-data'>
                    <input type='hidden' name='size' value='1000000'>
                    <input type='file' name='image' value='Upload photo'>
                    <textarea name='text' rows='8' cols='80'></textarea>
                    <br/>
                    <input type='submit' name='upload' value='Submit'>
                    </form>";
                  }
                  
                  ?>

【问题讨论】:

  • 在所有需要使用会话变量的php文件中添加session_start();作为第一行代码
  • 在需要会话变量的页面上添加session_start
  • 我的 main.php 文件中有 session_start。如果我在 login.php 中添加 session_start() 我得到“会话已经开始 - 忽略第 2 行 C:\xampp\htdocs\social_site\assets\login.php 中的 session_start()”

标签: php html session authentication post


【解决方案1】:

您必须在脚本开头添加session_start。 如果您不想在会话被销毁时出现 php 的警告,请添加检查会话是否仍然存在:

if(isset($_SESSION['password')){ [..] }

【讨论】:

  • 我的 main.php 文件中有 session_start。如果我在 login.php 中添加 session_start() 我得到“会话已经开始 - 忽略第 2 行 C:\xampp\htdocs\social_site\assets\login.php 中的 session_start()” -
  • 用 if(session_id() == "" ) 检查会话是否已经启动,然后运行 ​​session_start()
  • 我的 main.php
  • 那是在脚本的开头吗?
  • 是的。如果我在评论部分“发布”提交,我的会话就会消失。
【解决方案2】:

可能你用过dreamweaver,dreamweaver添加了一些隐藏的字符,你可以通过HXD软件查看或删除。 Download it from here.

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 2013-03-13
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多