php session使用初探
2007-05-31 02:53 P.M. 经过实验发现,PHP4的session只对当前打开的浏览器窗口有效(至少在W2K下的IE5和NS6中是这样)。  实验步骤:  首先我们来建立两个文件。test1.php session_start(); session_register("count"); echo $count=0; ?> test2.php session_start(); echo $count++; ?>   然后为了避免不必要的影响我们清空浏览器的cache,打开两个浏览器窗口,在第二个浏览器的窗口中执行test1.php,这时我们应该看到浏览器中显示的值是0。继续在第二个浏览器的窗口中执行test2.php,并不断的刷新它,我们就会看到浏览器中的数值在不断的递增,这说明我们的session是起作用的。我们继续看看其他的情况,先在第一个浏览器的窗口中执行test2.php,没有显示继续刷新,仍没有显示。我们再打开第三个浏览器窗口并在其中执行test2.php,也是没 有显示,这说明session不能跨窗口运行。  那么怎么才能让session可以跨窗口执行呢?我们一起来继续我们的实验。  首先,我们来看看使用cookie的情况,同样建立两个文件。test3.php setcookie("cookie","This is a cookie.",time()+3600,"/","www.md.hl.cn"); ?> test4.php echo $cookie; ?> 然后我们仍然利用刚才打开的三个浏览器的窗口,先在第二个窗口中执行test3.php。没有任何显示,然后我们在三个窗口中分别执行test4.php,都会显示This is a cookie.这说明使用cookie是可以跨窗口执行的。  我们怎么才能让session跨窗口执行呢?其实session也在cookie中保存了session_id(不过session也可以不使用cookie,但这不在本文的讨论范围)。这个cookie的名字与你在php.ini中的session.name的设置有关,缺省时叫"PHPSESSID"。但在IE的cache中却找不到。你可以通过echo $HTTP_COOKIE_VARS["PHPSESSID"]来查看它的值,当然也可以通过setcookie()来设置它。PHP4中可以使用session_set_cookie_params()和session_get_cookie_params()来设置和查看session的cookie设置。但我试了一下不起任何作用,session仍然是关闭浏览器窗口就失效,仍然不能跨窗口运行。我想也许是我调用的方法不对,麻烦那位高手知道给指点一下。  最后,我们来继续完成我们的实验。这次要修改我们的文件test1.phptest1.php session_start(); session_register("count"); setcookie("PHPSESSID",session_id(),time()+3600,"/","www.md.hl.cn"); echo $count=0; ?>  然后我们再来重复我们的实验一,哈哈,这次session可以跨窗口使用了吧,并且关闭浏览器session也不会马上失效,上例中的session应该是1小时后失效,但在做实验二时,我吧3600改成120,查看IE的cache,此cookie是2分钟后到期,但不停的刷新test4.php发现实际$cookie这个变量存在的时间却只有大约6秒中,不知道到底是怎么回事。:(麻烦那位高手知道给指点一下。  后记:这篇文章的所有程序是在Solaris 2.6,PHP 4.0.0,Apache 1.3.12下测试并通过的。 但写完这篇文章以后我又在Windows 2000 Advanced Server,PHP 4.0.1pl2,IIS 5.0测试了一 遍,发现PHP 4.0.1pl2中的session可以跨窗口运行,而且也可以用用session_set_cooie_params()设置session cookie的失效时间。

解决方案 »

  1.   

    我们怎么才能让session跨窗口执行呢?其实session也在cookie中保存了session_id(不过session也可以不使用cookie,但这不在本文的讨论范围)。这个cookie的名字与你在php.ini中的session.name的设置有关,缺省时叫"PHPSESSID"。但在IE的cache中却找不到。你可以通过echo $HTTP_COOKIE_VARS["PHPSESSID"]来查看它的值,当然也可以通过setcookie()来设置它。PHP4中可以使用session_set_cookie_params()和session_get_cookie_params()来设置和查看session的cookie设置。但我试了一下不起任何作用,session仍然是关闭浏览器窗口就失效,仍然不能跨窗口运行。我想也许是我调用的方法不对,麻烦那位高手知道给指点一下。.........................................................................但在做实验二时,我吧3600改成120,查看IE的cache,此cookie是2分钟后到期,但不停的刷新test4.php发现实际$cookie这个变量存在的时间却只有大约6秒中,不知道到底是怎么回事。:(麻烦那位高手知道给指点一下。
    -------------------------------
    上面的文章为网上的一篇文章。留下了两个问题请高手指点下
      

  2.   

    我的经验吧
    session
    有2种版本的写法可以来回换换看详细的看手册就知道了.我经常遇到 版本不同要换写法的
      

  3.   

    test1.php 
    <?php
    session_start(); $_session["count"] = 0; echo $_session["count"]; ?> test2.php 
    <?php
    session_start(); 
    $_session["count"] = $_session["count"] +1;
    echo $_session["count"]; ?>
      

  4.   

    感谢 hejunbin怪不得我看不明白,。还觉得怎么文章有点怪不过还是怪自己 一开始连 session的用法 也不认识。
      

  5.   

    <?php
    // page1.phpsession_start();echo 'Welcome to page 1';$_SESSION['favcolor'] = 'green';
    $_SESSION['animal']   = 'cat';
    $_SESSION['time']     = time();// Works if session cookie was accepted
    echo '<br /><a href="sessiony.php">page 2</a>';// Or maybe pass along the session id, if needed
    echo '<br /><a href="sessiony.php?' . SID . '"> SID </a>';?> 这个 sid 究竟是?????怎么回事。
      

  6.   

    <?php
    // page2.phpsession_start();echo 'Welcome to page #2<br />';echo $_SESSION['favcolor']; // green
    echo $_SESSION['animal'];   // cat
    echo date('Y m d H:i:s', $_SESSION['time']);// You may want to use SID here, like we did in page1.php
    echo '<br /><a href="sessionx.php">page 1</a>';?>