2014-09-05
php中的session可以默认情况下是使用客户端的cookie(以便和普通意义上的cookie区别,我称之为session cookie,普通意义上的cookie为cookie)来保存session id的,但是php中的session是否只能使用session cookie呢?
当然不是,否则何必还弄个session出来,不如直接用cookie算了.session的一大优点就是当客户端的cookie被禁用时会自动把session id附在url中,这样再通过session id就能记住session变量了.
下面我写两个文件来证实一下,首先在浏览器中设置禁用cookie.
[php]
<?
//文件名为test1.php
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>";
?><SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif"> </SPAN>
<?
//文件名为test1.php
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>";
?> [php]
<?//文件名为test2.php
session_start();
if (session_is_registered("url")) {
echo "congratulations.";
$url="test1.php";
echo "<a href=$url>goto test1.php</a>";
} else
echo "failed.";
?>
<?//文件名为test2.php
session_start();
if (session_is_registered("url")) {
echo "congratulations.";
$url="test1.php";
echo "<a href=$url>goto test1.php</a>";
} else
echo "failed.";
?>
现在在浏览器中输入"http://localhost/test1.php",把鼠标移到链接上看看状态栏上的地址,不是简单的"http://localhost/test2.php",而是这种形式:"http://localhost/test2.php?phpsessid=6e3610749f7ded3784bc4a4dd10f879b".
你还可以查看html的源文件,源文件是这种形式:
<a href="test2.php?phpsessid=6e3610749f7ded3784bc4a4dd10f879b">goto test2.php</a>
所以说这完全是php的功劳,和浏览器无关,也就是说无论你用什么浏览器session都有效,而不是有的人认为的只对ie有用.
但是,我们的超链接是语句是由echo语句输出的,如果超链接不包含在php的标签<? ?>之内会怎样呢?还是写个例子来验证一下,把test1.php稍作修改:
[html]
<?php
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>";?>
<a href="test2.php">(html形式)goto test2.php</a>
<?php
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>";?>
<a href="test2.php">(html形式)goto test2.php</a>
在浏览器中输入"http://localhost/test1.php",分别把鼠标移到两个链接上看看有没有不同?可以看到,两个链接是完全相同的,后面都会自动附带session id.所以不必担心没被包含在php标签中的链接会失效,php不会这么笨的.
但是在使用时要注意必须先用session_start()函数告诉php开始用session,哪怕你在这个文件中只有html代码,如:
<? session_start();?>
<html>
<head>
<body>
<a href=test2.php>gogogo</a>
…………
记得有人说过这个优点只能在linux/unix下才能发挥出来,而我用的win2000p+apache1.3.17+php4.0.4pl1,php为apache模块方式,却照样可以.恰恰相反,我转到linux下去测试时反而不行了.其实是在编译时的一个选项--enable-trans-sid控制了这项功能能否有用.而按照php默认来编译时是没有打开这项功能的,只需重新编译时加入它就可以了.我的配置为apache1.3.17+php4.0.4pl1,php为apache模块方式,在linux重新编译后用netscape navigator4.7测试可以通过(这更证明了和浏览器无关).
只靠session是不能跨窗口使用的,即使你启用了cookie,当你在一个窗口中有一个合法的session id(记录在session cookie中,不是url中),再新开一个窗口进入相同页面时,你会重新拥有一个新的session id,而与前一个窗口互不影响.
要想跨窗口使用同一个session id就只能在url后指定session id,也就是说如果你把带有session id的的窗口的url复制,在新开的窗口中粘贴一下,还是照样使用的.知道了session id的这个原理要实现跨窗口session还是不难的,可以把cookie与session结合起来,首先取得当前合法的session id,然后把它记录在cookie中,在其它窗口读取cookie就可获得当前的session id了.
1
CI框架连接数据库配置操作以及多数据库操作
09-05
2
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
05-17
3
C语言关键字及其解释介绍 C语言32个关键字详解
04-05
4
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
04-26
5
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
04-12
6
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
09-05
7
PHP中的(++i)前缀自增 和 (i++)后缀自增
09-05
8
PHP中include和require区别之我见
09-05
常用dos命令及语法
2014-09-27
将视频设置为Android手机开机动画的教程
2014-12-11
php递归返回值的问题
2014-09-05
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
2017-05-03
java中的info是什么意思
2022-03-24
PHP 教程之如何使用BLOB存取图片信息实例
2014-09-05
IcePHP框架中的快速后台中的通用CRUD功能框架
2014-09-05
单片机编程好学吗?单片机初学者怎样看懂代码
2022-03-21
PHP数组函数array
2014-09-05
学ug编程如何快速入门?
2022-03-17
镜解视界游戏下载v1.1.5 官方安卓版
角色扮演 918.7M
下载铁拳5暗之复苏手机版下载v2022.02.18.18 安卓双人街机版
动作闯关 1.10G
下载武娘外传手游下载v2.2 安卓最新版
角色扮演 376.4M
下载闪耀暖暖越南服官方版下载v2.7.1500283 安卓版
经营养成 2.59G
下载萌幻西游手游官方版下载v2.4.1 安卓版
卡牌对战 385.8M
下载三国戏英杰传官方版本下载v6.87.2077 安卓最新版
策略塔防 639.8M
下载名将集手游下载v1.0.6 安卓版
角色扮演 405.8M
下载破天一剑官方正版手游下载v6.90 安卓最新版本
角色扮演 1.16G
下载银河战舰手游官方版下载v1.31.87 安卓最新版
下载
碧蓝航线台服官方版下载v7.1.1 安卓版
下载
虎符传奇正式版下载v1.8 安卓最新版
下载
植物大战僵尸中国馆手机版随机植物下载v2024.05.01 安卓中国版
下载
漫威终极逆转手游最新版下载v112.0.0 安卓官服
下载
起源之潮官方版手游下载v1.0.4 安卓最新版
下载
勇者养成记游戏下载v1.226 安卓手机版
下载
诸神皇冠最新版本下载v2.1.28.65181 安卓客户端
下载