表单文本以指定会话名称

时间:2016-03-28 08:25:26

标签: php codeigniter session

我想允许用户输入一些文本,然后使用该文本作为他们的会话用户名,然后在每个页面的顶部回显一个欢迎的“用户名”,然后是一个注销按钮,它将结束会话并允许用户输入新用户名

目前代码将允许用户输入名称,然后将显示该名称的欢迎,但如果用户更改页面,它将被销毁,输入名称的文本字段也不会消失 - 这是codeigniter中的母版页

<form action="" method="POST">
<input type="text" name="input_value">
<input type="submit" name ='in'  value="LogIn">
</form>

<?php
    if (session_status() == PHP_SESSION_NONE) {
      session_start();
        $_SESSION['userses'] = '';
    }

   if(session_status() == PHP_SESSION_ACTIVE && $_SESSION['userses']=='' ){

  $_SESSION['userses'] = $_POST['input_value'];
  echo "Welcome, ".$_SESSION['userses']."!";
   }

 else{
 echo "Welcome, ".$_SESSION['userses']."!";
  }



?>
<form action="<?php session_destroy(); ?>" method="POST">
<input type="submit" name='out' value="LogOff">
</form>

1 个答案:

答案 0 :(得分:-1)

你必须改变

if(session_status() == PHP_SESSION_ACTIVE && $_SESSION['userses']=='' )

if(isset($_POST['in']) ){

 $_SESSION['userses'] = $_POST['input_value'];
}

所以当他提交用户名时,这个if会捕获帖子请求,然后将输入添加到你的用户名

您不需要检查session_status

编辑:

并且如评论所述,把session_start();在每一页的开头

代码示例:

<?php session_start();
if(isset($_SESSION['userses'])) echo "Welcome".$_SESSION['userses']; 
?>
<form action="" method="POST">
<input type="text" name="input_value">
<input type="submit" name ='in'  value="LogIn">
</form>

<?php

if(isset($_POST['in']) ){

 $_SESSION['userses'] = $_POST['input_value'];
}
?>
<form action="<?php session_destroy(); ?>" method="POST">
<input type="submit" name='out' value="LogOff">
</form>

您正在使用codeigniter,为什么不使用会话库:

  

https://www.codeigniter.com/user_guide/libraries/sessions.html