php 判断 表 php中sessionn 值是否存在

一、默认机制,用磁盘文件来实现PHP会话。php.ini配置:session.save_handler = files  1、session_start()    A、&session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,      PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的,      但是有的系统是 session.gc_probability =0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。&&&&&&&&&&&   session.gc_probability =1&&&&&&&&&&&   session.gc_divisor =1000&&&&&&&&&&&   session.gc_maxlifetime =1440//过期时间 默认24分钟&&&&&&&&&&&   //概率是 session.gc_probability/session.gc_divisor 结果 1/1000, &&&&&&&&&&&   //不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。&&&&&&&&&&&   session.save_path =//好像不同的系统默认不一样,有一种设置是 "N;/path"&&&&&&&&&&&   //这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本    B、&session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,      这个值可以从php.ini找到&&&&&&&&&&&   session.name = PHPSESSID //默认值PHPSESSID&&&&&&&&&&&&     C、&如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端.      相当于执行了下面COOKIE 操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的,      这之前是不能有输出的,PHP有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。&&&&&&&&&&&&&&& setcookie(session_name(),&&&&&&&&&&&&&&&&&&&&&&&&& session_id(),&&&&&&&&&&&&&&&&&&&&&&&&& session.cookie_lifetime,//默认0&&&&&&&&&&&&&&&&&&&&&&&&& session.cookie_path,//默认'/'当前程序跟目录下都有效&&&&&&&&&&&&&&&&&&&&&&&&& session.cookie_domain,//默认为空&&&&&&&&&&&&&&&&&&&&&&&&& )    D、&如果存在那么session_id =$_COOKIE[session_name];      然后去session.save_path指定的文件夹里去找名字为'SESS_'.session_id()的文件.      读取文件的内容反序列化,然后放到$_SESSION中
  2、 为$_SESSION赋值    比如新添加一个值$_SESSION['test'] ='blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,    用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源.&&&&& 这个阶段有可能执行更改session_id的操作,    比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上,    比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id&&&&&&&   if (isset($_COOKIE[session_name()])) {&&&&&&&&&   setcookie(session_name(),'',time() -42000,'/');//旧session cookie过期&&&&&&&   }&&&&&&&   session_regenerate_id();//这一步会生成新的session_id&&&&&&   //session_id()返回的是新的值&&&&& 3、&写入SESSION操作    在脚本结束的时候会执行SESSION写入操作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在,    可能需要创建新的文件。
  4、&销毁SESSION    SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,    比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多,&&&&&&&&&   1.&setcookie(session_name(),session_id(),time() -8000000,..);//退出登录前执行&&&&&&&&&   2.&usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。&&&&&&&&&   3.&session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id    当不关闭浏览器的情况下,再次刷新,2和3都会有COOKIE传过来,但是找不到数据二、由用户自定义session处理机制。php.ini配置:session.save_handler = user&&&&& 用户自定义session处理机制,更加直观&&& *session_set_save_handler('open','close','read','write','destroy','gc'); 1.session_start(),&&&&& 执行open($save_path,$session_name)打开session操作句柄&&&&& $save_path 在session.save_handler = files的情况下它就是session.save_path,但是如果用户自定的话,这个两个参数都用不上,直接返回TRUE&&&&& 执行read($id)从中读取数据.//这个参数是自动传递的就是session_id(),可以通过这个值进行操作。&&& *2.脚本执行结束&&&&& 执行write($id,$sess_data) //两个参数,很简单&&& *3.假如用户需要session_destroy()&&&&& 先执行destroy.在执行第2步&&&&& 一个实际例子:&&&&& //SESSION初始化的时候调用&&&&& function open($save_path,$session_name)&&&&& {&&&&&&& global$sess_save_path;&&&&&&& $sess_save_path=$save_path;&&&&&&& return(true);&&&&& }&&&&& //关闭的时候调用&&&&& function close()&&&&& {&&&&&&& return(true);&&&&& }&&&&& function read($id)&&&&& {&&&&&&& global$sess_save_path;&&&&&&& $sess_file="$sess_save_path/sess_$id";&&&&&&& return (string) @file_get_contents($sess_file);&&&&& }&&&&& //脚本执行结束之前,执行写入操作&&&&& function write($id,$sess_data)&&&&& {&&&&&&& echo"sdfsf";&&&&&&& global$sess_save_path;&&&&&&& $sess_file="$sess_save_path/sess_$id";&&&&&&& if ($fp= @fopen($sess_file,"w")) {&&&&&&&&& $return=fwrite($fp,$sess_data);&&&&&&&&& fclose($fp);&&&&&&&&& return$return;&&&&&&& } else {&&&&&&&&& return(false);&&&&&&& }&&&&& }&&&&& function destroy($id)&&&&& {&&&&&&& global$sess_save_path;&&&&&&& $sess_file="$sess_save_path/sess_$id";&&&&&&& return(@unlink($sess_file));&&&&& }&&&&& function gc($maxlifetime)&&&&& {&&&&&&& global$sess_save_path;&&&&&&& foreach (glob("$sess_save_path/sess_*") as$filename) {&&&&&&&&& if (filemtime($filename) +$maxlifetime&time()) {&&&&&&&&&&& @unlink($filename);&&&&&&&&& }&&&&&&& }&&&&&&& returntrue;&&&&& }
阅读(...) 评论()最近被一位做底层开发的大牛问到,我们系统如何保证用户的交易。经过深聊他告诉我 Session是可以被破译的,这个话深深的刺激到了我!因为我们系统用户验证通过后服务器会分配一个 Session ID作为用户已经登录的凭证。因为刚开始学的时候PHP教程也是这样教我们的,如果Session ID被破解这样用户可以畅通无阻这个系统。
于是带着问题请教了2位,技术主管。王兄,曹兄。第一位王兄告诉我的答案是这个你别担心了,Session存在服务器的不像cookie是存在客户端的,要是直接获取到那么就是服务器都被攻陷了。当然这样的情况我们是不会让他发生的,那么破解是否有可能?回答:破译也是非常非常小的概率,那几乎是不可能的事情。于是安慰我说这个问题就别想了,不存在。
带着疑问有问了曹兄,曹兄做PHP已经非常多年了,我和他说这个问题的时候,他也思考好像他那里也有这样的问题。于是他告诉我这个理论是存在这个情况的。具体截图给我分析如下图,用户登录验证后,PHP服务器会返回PHPSESSION 这个ID会存在浏览器中,和与服务器交互会回传。服务器在进行验证。如果用户知道PHPSESSION 并且可以模拟浏览器提交是不是就可以使用用户所有的操作。答案是:“对,完全存在这种可能!”,
如果是真能破解,我们有办法解决这个问题吗?
曹说避免这样的情况你可以用HTTPS加密协议来做这样安全点,然后在做客户端和服务器做双向安全证书(支付宝是这样干)这样就不存在被破译的事情了。
浏览器请求截图
服务器Session截图
如果被破解了,我们是有办法通过证书解决这个问题的。如果破解那么存在多少可能?
答案我们可以算算:
PHPSESSION=4airjpi4bfr1fpdfkkudfdc706
截图数据可以分析出,PHP应该是数字和字母组合并且是26位字符 这样组合出来就是
(26+10)^26=2.9e+40
一算40位小数的可能。我想PHP能大面积应用一定他也有安全的考虑?所以暴力破解看起来是很难讨到便宜。
服务器本身的防御是否可以抵挡这样攻击,我们也是算一下。目前我还没有做个特别大型的系统,按照极限情况来算,平均1秒内有1000用户同时访问(之前微信博文流量量最大估计也不超过这个数),我想那个时候服务器已经很吃力了,CPU可能已经吃到50%。首先服务器会扛不住哪样的破解,服务器会瘫痪,为了避免这个问题服务器一般都会有防CC攻击、DDoS攻击。下图为之前案例的防火墙设置,WEB请求60秒内允许120次,如果超过会禁用你这个IP。一般的破解防火墙也会过滤掉,讨不到什么便宜!!
综合分析:
一个程序与黑客之前的攻守是时时存在的,作为正面战场的程序员,需要建筑起自己的城堡,需要搭建出自己的帝国,需要付出非常多的艰辛,
但是黑客只需要找到一个漏洞,就可以打劫我们的粮仓,纵观整个发展,我愿意做建筑城堡的建筑人,不愿意做偷鸡摸狗的勾当,一个人有品德的程序员,
一定是做利人利己的事情。
感谢这位C语言大神给我指点,因为我们处的位置不一样,也给我一个很震撼的问题,让我思考,将来工作和生活中需要认真仔细,守好自己的一亩三分地,
守好自己的底线。以上所有观点均为个人,如果偏差,请大家多多指导一下。再次感谢每一位回帖的人。
PHP加密解密技巧
使用这些PHP加密解密的原因是因为有时自己的URL地址被人获取以后想破解你里面传值的内容就必须知道你的key,没有key,他应该要破了一阵子才能知道你URL里面的内容吧...
闲话少说,先将它们打包...
php判断session是否设置
//设置fseek
if(isset($_SESSION[&f_fseek_size&])){
$_SESSION[&f_fseek_size&]=0;
php 利用 session_status 判断 session 状态
一、官方 session_status() 返回值为:
PHP_SESSION_DISABLED 会话是被禁用的。PHP_SESSION_NONE 会话是启用的,但不存在当前会话。PHP_S...
php 用户登录:如何判断用户是否登录
php中Session使用方法详解
http://www.3lian.com/edu//169168.html原文地址
Session的声明与使用
  Session的设置不同于Cooki...
PHP安全编程之cookie暴露导致session被劫持
使用Cookie而产生的一个风险是用户的cookie会被攻击者所盗窃。如果会话标识保存在cookie中,cookie的暴露就是一个严重的风险,因为它能导致会话劫持。
PHP为你处理相关会...
PHP安全编程:session劫持的防御
session 数据暴露
会话数据常会包含一些个人信息和其它敏感数据。基于这个原因,会话数据的暴露是被普遍关心的问题。一般来说,暴露的范围不会很大,因为会话数据是保存在服务器环境中的,而不是在数据库...
服务端和客户端之间是通过session(会话)来连接沟通。当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session。每个用户的session都是独立的,并且由服务器来维护。每个用户的s...
对于Web应用程序来说,加强安全性的第一条原则就是——不要信任来自客户端的数据,一定要进行数据验证以及过滤才能在程序中使用,进而保存到数据层。然而,由于Http...
常见的Web攻击分为两类:一是利用Web服务器的漏洞进行攻击,如CGI缓冲区溢出,目录遍历漏洞利用等攻击;二是利用网页自身的安全漏洞进行攻击,如SQL注入,跨站脚本攻击等。SQL注入攻击(SQL In...
没有更多推荐了,博客分类:
& 在以前的php 版本中,要判断session是否有效,只能用如下的方法:
session_start();
if(isset($_SESSION))
echo "Started";
echo "Not Started";
&& 而在php 5.4(即将发行)中,对session的状态进行了细分,可以用如下的方法判断:
session_start();
$status = session_status();
if($status == PHP_SESSION_DISABLED)
echo "Session is Disabled";
else if($status == PHP_SESSION_NONE )
echo "Session Enabled but No Session values Created";
echo "Session Enabled and Session values Created";
& 可以看到,通过使用session_status()返回的是一个int类型的值,表示出session的各种状态,比如禁止(PHP_SESSION_DISABLED ),session还不存在
(PHP_SESSION_NONE)
,或者session已经被建立起来了(PHP_SESSION_ACTIVE)
[/align][align=right][size=x-small][align=left][/align]
浏览: 6020811 次
来自: 广州
有些扩展名为null
非常感谢!!!!!!!!!
https://zhuban.me竹板共享 - 高效便捷的文档 ...
kris_zhang 写道如果有多个@Primary 会怎么样 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'关键字:PHP Session 登陆 验证&
本文地址:&
首先,在MySQL数据库中创建管理员账号表
create table users
username char(8) not null,
passcode char(8) not null,
userflag int,
primary key(username)
接着对表进行初始化,输入数据。
insert into users values('admin','admin123',1);
用户登陆页面:
&title&Login_fangbei&/title&
&form name="fangbei" method="post" action="check_session_login.php"&
&div style="width:353"&
&div align="left"&
&input type="text" name="username" /&
&div align="left"&
&input type="password" name="passcode" /&
&p align="center"& &input type="submit" name="Submit" value="Submit" /& &input type="reset" name="Reset" value="Reset" /& &/p&
这个页面登陆之后,会从表单中转向check_session_login.php页面。
代码如下:
@mysql_connect("localhost","root",'root')
or die("数据库连接失败");
@mysql_select_db("mydb")
or die("选择数据库失败");
//获取输入的信息
$username = $_POST['username'];
$passcode = $_POST['passcode'];
//获取session的值
$query = @mysql_query("select username,userflag from users where username = '$username' and passcode = '$passcode'")
or die("SQL语句执行失败");
//判断用户以及密码
if($row = mysql_fetch_array($query))
session_start();
//判断权限
if($row['userflag'] == 1 or $row['userflag'] == 0){
$_SESSION['username'] = $row['username'];
$_SESSION['userflag'] = $row['userflag'];
echo "&a href='welcome_session_login.php'&欢迎访问www.cnblogs.com/txw1958&/a&";
echo "userflag不正确";
echo "username或者usercode";
验证通过之后,达到欢迎页面welcome_session_login.php。
代码如下:
session_start();
if(isset($_SESSION['username']))
if($_SESSION['userflag'] == 1)
echo "欢迎管理员".$_SESSION['username']."登陆";
if($_SESSION['userflag'] == 0)
echo "欢迎用户".$_SESSION['username']."登陆";
echo "您没有权限访问此页面";
最后还有个销毁session页面destroy_session_login.php。
代码如下:
unset($_SESSION['username']);
unset($_SESSION['passcode']);
unset($_SESSION['userflag']);
echo "注销成功";
阅读(...) 评论()PHP检查session是否存在
PHP检查session是否存在
PHP有几种方法可以用来检查session是否存在。方法一:结合session_id和isset()if(session_id() == '' || !isset($_SESSION)) {
echo 'Session不存在';}方法二:php 5.4+使用if (session_status() == PHP_SESSION_ACTIVE) {
echo 'Session处于激活状态';}session_status状态值:PHP_SESSION_DISABLED:session被禁用PHP_SESSION_NONE:session启用,但不存在。PHP_SESSION_ACTIVE:session启用,并存在。
版权声明:著作权归作者所有。
欢迎登录体验!邮箱或
如果要兼容POSIX的话可以使用command:command&-v&&the_command&
使用示例:if&!&[&-x&&$(command&-v&git)&&];&then
&&echo&'Error:&git&nbs
使用IF&EXISTSIF&EXISTS(SELECT&1&FROM&sys.columns&
&&&&&&&&&&WHERE&Name&=&N'columnName'
可以使用&algorithm&的std::find来搜索vector#include
if ( std::find(vector.begin(), vector.end(), item) != vector.end() )
do_this();
do_that();
使用Date()构造日期对象,如果传入非日期格式的字符串,仍然能构造出Date对象。在chrome控制台&var&date&=&new&Date(&hello&);
Invalid&Date
&typeof&date
“object”
&date&instanceof&nb
在jquery里,隐藏或显示元素可以分别使用.hide()和.show()。$(&#myid&).show();
$(&#myid&).hide();
有时我们需要检查元素是否可见,从而根据元素的可见性做出处理。jquery里可以使用is(&:visible&)可见:$(element).is(&:visible&);
方法一使用os.path.exists判断路径是否存在,包括文件夹和文件。import&os.path
os.path.exists(my_file)
方法二使用os.path.isfile检查路径是否为文件,如果文件存在返回True。import&os.path
os.path.isfile(my_file)&
方法三面向对象文件系统路径操作包pathlib2,pa

我要回帖

更多关于 php设置session时间 的文章

 

随机推荐