nbdxkfq 发表于 2011-1-31 10:43:34

CI使用PHP原生session的问题

可能 这个问题和 CI没有什么关系 。。不过不知道可以放到哪里。。就来这里问了

自从上次使用CI的session出 问题 之后 。就开始尝试使用PHP的 原生session。但是还是出现问题 ,由于是菜鸟。不知道怎么解决了。上来问问大家

情况是这样的

我有一个模板文件,叫base_page.php,其他所有页面都是基于这个模板的,这个模板文件这样写的

<?php session_start();echo session_id();?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8" />
      <title>Blog</title>
      <meta name="keywords" content="" />
      <meta name="description" content="" />
      <link href="<?php echo base_url(); ?>css/main.css" rel="stylesheet" type="text/css" media="screen" />
      <script type="text/javascript" src="<?php echo base_url(); ?>js/articles_list.js"></script>
    </head>
    <body>
      <div id="wrapper">
            <div id="header-wrapper">
                <?php include('header.php'); ?>
            </div>
            <!-- end #header-wrapper -->
            <div id="page">
                <div id="banner"><a href="#"><img src="<?php echo base_url(); ?>/images/img05.jpg" alt="" /></a></div>
                <div id="page-bgcontent">
                  <?php if ($page_type == 'articles_list'):?>
                        <?php include('articles_list.php'); ?>
                  <?php endif;?>
                  <?php if ($page_type == 'login'):?>
                        <?php include('login.php'); ?>
                  <?php endif;?>
                  <?php include('sidebar.php'); ?>
                  <div style="clear: both;">&nbsp;</div>
                </div>
                <?php include('footer.php'); ?>
            </div>
            <!-- end #page -->
      </div>
    </body>
</html>

这个文件最开始有session_start(),,然后我想获得这个session的 ID

在这个模板文件的<?php include('header.php'); ?>
这个 header文件里面,有一个login功能

代码是这样的
<div id="header">
    <div id="logo">
      <h1><a href="#">BLOG</a></h1>
      <h2>Brand New</h2>
    </div>
    <div id="search">
      <form method="get" action="">
            <fieldset>
                <input type="text" id="search-text" name="s" value="" />
            </fieldset>
      </form>
    </div>
    <!-- end #logo -->
</div>
<!-- end #header -->
<div id="menu">
    <ul>
      <li class="first"><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
    <?php if (!isset($_SESSION['username'])): ?>
      <a href="<?php echo base_url(); ?>index.php/login/" id="login">Login</a>
    <?php elseif (isset($_SESSION['username'])): ?>
            <a href="<?php echo base_url(); ?>index.php/logout/" id="logout">Logout</a>
    <?php endif; ?>
</div>
<!-- end #menu -->
然后login的controller是这样写的
class Login extends Controller
{

    function Login()
    {
      parent::Controller();
    }

    function index()
    {

      if ((isset($_POST['username'])) && (isset($_POST['password'])))
      {
            $username = trim($_POST['username']);
            $password = trim($_POST['password']);

            $data['error'] = "";

            // Check whether the usename or the password is empty
            if (empty($username))
            {
                $data['error'] = "Username cannot be NULL!";
            }
            elseif (empty($password))
            {
                $data['error'] = "Password cannot be NULL!";
            }

            if ((!empty($username)) && (!empty($password)))
            {
                $sql = "SELECT `u_id`, `u_password` FROM `user` WHERE `u_username` = '" . $username . "'";
                $this->load->model('blog_model');
                $result = $this->blog_model->query($sql);
               
                // If username does not exist
                if (empty($result))
                {
                  $data['error'] = "User does not exist!";
                }
                // If password does not match
                elseif ($password != $result->u_password)
                {
                  $data['error'] = "Password error!";
                }
                elseif ($password == $result->u_password)
                {
                  session_start();
                  $_SESSION['user_id'] = $result->u_id;
                  $_SESSION['username'] = $username;
                  redirect(base_url() . "index.php");
                }
            }
      }
      $data['page_type'] = 'login';
      $this->load->view('basic_page', $data);
    }

}
这个时候,如果我首先打开首页,由于 session_start()的作用,会创建一个session文件 。。这个时候,如果我点击login这个超级连接。。我发现 。。又一个新的session文件又被创建了 。而且以后的login的过程中,操作的都是新创建的session,第一个完全没有内容

等我登陆之后 ,,如果新开一个页面,,再进入首页,,会操作第一个session,这样由于没有内容,用户处于没有登陆状态,如果我点击login,会发现,第2个有内容的session被调用,这样用户就处于登陆状态了。。。。。我感到很奇怪。。不知道为什么会这样。。


不知道这样有没有说清楚。。如果需要其他什么问题活着补充的话。我请告诉我 。。谢谢 。。我在线等的

西斯莱杰 发表于 2014-6-13 09:49:59

Hex 发表于 2014-6-12 20:08
这个是直接替换的 Session 类,肯定是支持,但是和文档描述的接口可能有不同。

...

恩,试过了,是支持的.对于过期时间怎么设置呢,只能通过 ini_set 来全局设置 session.gc_maxlifetime么,单一session的过期时间可以进行设置么?

Hex 发表于 2014-6-13 10:12:40

西斯莱杰 发表于 2014-6-13 09:49
恩,试过了,是支持的.对于过期时间怎么设置呢,只能通过 ini_set 来全局设置 session.gc_maxlifetime么 ...

Session 都是统一过期吧,Session 不是缓存,要搞清楚用途。

Hex 发表于 2014-6-12 20:08:05

西斯莱杰 发表于 2014-6-12 19:06
2.1.4 版本,支持么?

这个是直接替换的 Session 类,肯定是支持,但是和文档描述的接口可能有不同。

Hex 发表于 2011-1-31 11:46:21

用我发布的 Session 类即可解决问题,不用这么纠结。

nbdxkfq 发表于 2011-1-31 11:47:39

哦 。。。我去看看 ,谢谢啊 ,只是我不知道为什么会这样 。。。感觉没有什么问题

nbdxkfq 发表于 2011-1-31 12:35:31

我知道了。。我刚开始打的时候用的URL是 127.0.01/myblog,然后跳转之后的url变成了localhost以至于可能误认为2个不同的地址或者什么的,,如果一开始就打localhost/myblog的话。。就不会出现问题了 。。哈哈 。。谢谢哑

白色格调 发表于 2012-12-12 22:30:28

Hex 发表于 2011-1-31 11:46 static/image/common/back.gif
用我发布的 Session 类即可解决问题,不用这么纠结。

你好,我新手一个,看到好多地方都是用你的session类,但是没找到地方下载啊,提供个连接把。谢谢啊

Hex 发表于 2012-12-13 10:42:05

白色格调 发表于 2012-12-12 22:30 static/image/common/back.gif
你好,我新手一个,看到好多地方都是用你的session类,但是没找到地方下载啊,提供个连接把。谢谢啊 ...

http://codeigniter.org.cn/forums/thread-4007-1-1.html

常去代码区看看啊~

西斯莱杰 发表于 2014-6-12 19:06:53

Hex 发表于 2012-12-13 10:42
http://codeigniter.org.cn/forums/thread-4007-1-1.html

常去代码区看看啊~

2.1.4 版本,支持么?
页: [1] 2
查看完整版本: CI使用PHP原生session的问题