‘壹’ php中session概念理解知道的请进
根据我个人的理解,session无非就以下三点,不知道对你有没有帮助
(1)Session:在计算机中,尤其是在网络应用中,称为“会话”。
(2)Session直接翻译成中文比较困难,一般都译成时域。在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。
(3)Session解决方案,就是要提供在PHP脚本中定义全局变量的方法,使得这个全局变量在同一个Session中对于所有的PHP脚本都有效。
‘贰’ php SESSION 设置和php代码的问题
<?
error_reporting(2047);
@session_start();
if($_SESSION['sf1']==1) die("24小时只能注册一次!");
?>
come baby
success1.php
代码:
<?php
error_reporting(2047);
session_start();
$_SESSION['sf1']=1;
die("你已进入过了");
?>
注意:我加了一句打开错误输出
还加了两个点
‘叁’ php中如何使用SESSION
1、在php中使用session,首先要启动session会话,启动session会话要使用php内置函数session_start(),如图所示。
‘肆’ 一个关于PHP 简单的session问题 入门级别 求解决
既然是初级我就写一个面向过程的,文件的路径自己改下
第一步,登陆页面
<?php
if(isset($_POST) && (!empty($_POST)){//$_POST被设置 并且不为空,这isset,empty两种都写上比较保险,等你学了yii框架 tp框架就明白了
//连接数据库,选择数据库(代码省略,其实好久不用有点忘了,这种写法在php5.5已经废弃,你了解就行,现在都用框架,那个学好了才是真的)
$result=mysql_query("select * from tablename where username=$_POST['username'] and password=$_POST['password']");//查询是否有这用户并且密码是否正确,如果$result不为空则说明密码正确,密码其实应该md5加密,此处为了便于理解省略
if($result){
session_start();//开启session
$_SESSION[islogin]=1;
$_SESSION['username']=$_POST['username'];
}
}
?>
<form action=login.php>
<input type='text' name='username'>
<input type='password' name='password'>
</form>
以下为引入文件简称inc,所有页面都要加上以下代码.用了狂接就不用这么麻烦了.理解下就行
<?PHP
session_star();
if($_SESSION[islogin]!=1){
header(location:localhost/login.php)
}
首页:
require ('inc.php')//加载上面的文件
某个位置上写上: 欢迎$_SESSION['username'] 登陆//显示登录的用户名
祝你学习成功
‘伍’ php的session 有什么用
session是什么,刚开始我也不明白,非专业词典翻译为会议,会议期。直到接触asp后才知道session是干什么的,有什么用。
作个不太恰当的比喻吧(虽然不恰当,但意义却是一样的),session就好象你和你女友(或妻子)之间的感情似的,session是你和网站之间的感情。
session在WEB技术中占有非常重要的份量。由于网页是一种无状态的连接程序,因此你无法得知用户的浏览状态。因此我们必须
通过session记录用户的有关信息,以供用户再次以此身份对web服务器提供要求时作确认,例如,我们在某些网站中常常要求用户登录,
但我们怎么知道用户已经登录了呢,如果没有session的话,登录信息是无法保留的,那岂不要让用户在每一页网页中都要提供
用户名和密码。
当然,session不光用于用户身份认证功能,还可能用于其它方面,以后我们会提到的。
session用中文来解释就是会话期。一个会话期开始于用户输入一个站点的网址时,结束于他离开这个站点时。
session最早出现在动态脚本语言Active Server Pages中,它的功能之强大,是一句话无法说清楚的。
当php还在3.0版本时,session是它永远的痛。虽然php具有执行速度快,使用灵活,功能强大等优点,但因为session的问题,使很多站点的开发放弃了php,至少我的老板是这样认为的。当时有很多php免费函数库提供在php3上实现session的方案,但都让人感觉不正宗。
就好象你花好几千大洋买的手机却配置一个很粗糙的草作的袋子一样,虽然功能是一样的,但总让人觉得别扭。php4的出现让php在session问题上
有了翻身的机会。虽然它的session实现还不是很理想(主要是效率问题),但毕竟是它自己实现的,而且可以实际使用了。
那我们用session干什么呢,你说了半天,我用不上的话,你岂不有卖纸张之嫌。OK,我们来看看session有什么用:作过网站的人都有这样的体会,在一页页面中的变量(在本章都指服务器端变量,下同)是不能在下一页中用的,虽然有一些办法可以实现,比如用form,urlstring等等
但有些对于用户来说是不方便的,即使让form自动提交,但其中的延时在现今的网络状况下足以让人窒息,而这两种方法都明显加大程序员的负担。如果你正在开发一个大型项目,那这些额外的负担是不能忽略的。而有了session就好办了,session中注册的变量可以作为全局变量使用。什么,全局变量?
好极了。这样一来,你知道有什么用了吧:最主要的用于用户身份认证,程序状态记录,页面之间参数传递。
说了它这么半天的好处,你已经动心了吧,先别高兴,它还有缺点呢:它是用文件保存的变量(当然效率不高了,虽然可以用别的方式,但
很麻烦的),不能保存对象。与之相对的是,asp中的session可以保存对象变量,用内存变量来保存session变量。但为什么我们还选用php呢,呵呵,
为什么,你能从本书的开始看到这章,想必你也应该明白了吧,你还不明白,Faint,你再从头看起吧,我保证你成为PHP专家^_^。
session是怎样实现的呢?呵呵,你一定以为很高深吧,我来告诉你它的秘密。如果说只保存变量的话,很多读者都明白,这是很简单的,
但前面我们说过,http协议是一种无状态的连接,你怎么知道那个变量是谁的,这个变量又是谁的呢?在session实现中用cookie实现的。cookie
存在于客户端,也就是用户的机器中,里面保存着用户的session ID,也就是session号码,当用户的浏览器请求服务器时把session ID也一起送到
服务器,这样服务器就可以识别你是谁,也就可以把变量识别开了。这样我们就不难理解了,为什么有时session会失效了。不信的话,你可以试试:
在IE的"工具"菜单上有"Internet选项"菜单,打开后再选"安全"->"自定义级别",将安全设置中的"允许使用每个对话cookies"设为禁用,再看看
session能不能用。这下明白了吧!不过php4在linux/unix平台上可以自动检查cookies状态,当cookies 不可用时,自动会把session ID
附带在url上进行传递。这是它在session方面比asp多的唯一的优点了。
‘陆’ php session
用SESSION记录不同用户$_SESSION['name']='xx'
‘柒’ 用PHP怎么在session里存多个id
这个你不用担心,每个session都有唯一的session_id,每次生成session,php都会自动生成1条唯一的session
session_id是不会打印出来的
只能另行输出 echo session_id()
或者可以:
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
前序:
首先要明白PHPSESSID看似多次刷新都不会改变其实是没有删除本地相关联的cookie,删除的方法
session_destroy();//删除服务器端的session文件
setcookie(session_name(),'',time()-3600,'/');//删除本地相关联的cookie
session_unset();//清空内存中的cookie或者是$_SESSION = array();
然后再刷新相应的页面你就会看到PHPSESSID会发生变化了,根据此可以得:如果session文件已经创建则不重新生成PHPSESSID,否则需要重新生成,生成规则,就看下边喽……!
--------------------------------------------------------------------------------------------------------------------------------------
现在经过测试应该是不是检测session文件是否存在,而是检测PHPSESSID的cookie是否存在并且是否未过期!特此更正!
------------------------------------------------------------------------------------------------
可能PHP开发者心中多少都思考过这么两个问题:
种植在客户端浏览器中的PHPSESSIONID会出现重复吗?
PHPSESSIONID安全性如何,有没可能被黑客轻易的仿造呢?
带上这个问题,我稍微注意了一下PHP的源码后,疑问也就有了答案。
PHP在使用默认的 session.save_handler = files 方式时,PHPSESSIONID的生产算法原理如下:
hash_func = md5 / sha1 #可由php.ini配置
PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器)
从以上hash_func(*)中的数据采样值的内容分析,多个用户在同一台服务器时所生产的PHPSESSIONID重复的概率极低(至少为百万份之一),设想,但台动态Web Server能到2000/rps已经很强悍了。
另外,黑客如果要猜出某一用户的PHPSESSIONID,则他也必须知道“客户端IP、当前时间(秒、微妙)、随机数”等数据方可模拟。
以下是截取PHP源码中PHPSESSIONID实现片段:
gettimeofday(&tv, NULL);
if (
zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &array) == SUCCESS &&
Z_TYPE_PP(array) == IS_ARRAY && zend_hash_find(Z_ARRVAL_PP(array), "REMOTE_ADDR", sizeof("REMOTE_ADDR"), (void **) &token) == SUCCESS)
{
remote_addr = Z_STRVAL_PP(token);
}
spprintf(&buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? remote_addr : "", tv.tv_sec, (long int)tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);
switch (PS(hash_func))
{
case PS_HASH_FUNC_MD5:
PHP_MD5Init(&md5_context);
PHP_MD5Update(&md5_context, (unsigned char *) buf, strlen(buf));
digest_len = 16;
break;
case PS_HASH_FUNC_SHA1:
PHP_SHA1Init(&sha1_context);
PHP_SHA1Update(&sha1_context, (unsigned char *) buf, strlen(buf));
digest_len = 20;
break;
default:
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid session hash function");
efree(buf);
return NULL;
}
‘捌’ 关于php中的session
如果$_SESSION['这里面的参数名一样'] 那么就会覆盖原先定义的值
返回什么类型 完全取决于你存的是什么,弱变量就是这样,呵呵
你放的是字符串的取的就是字符串 放的是整型 取出的就是整数
放数组取的就是数组
‘玖’ php中session的问题
a.php中把session_start()写在最上面,另外你这2个PHP文件中session.start()语句之前是否有html的标签,例如<html><head>等等,如果有就把你的PHP代码写在html标签之前。。。
‘拾’ php分多次存入session,
钒擦拭评仿影视烂