PHP中的session的几个问题

 更新时间:2016年11月25日 16:15  点击:1398
session 的生命周期是多长
1 浏览器结束时其生命周期也同时结束,但是档案仍然存在于 /tmp/(sess_???)
2 下次重新开浏览器时会重新分配 sessionID,如果你使用 session_id() 把以前的 ID 带回来,则会去读取残存在 /tmp 处的 sess_???, 取回你之前所有已经设定的参数
3 可以在 php.ini 里修改 session 档案残存的时间

session.gc_maxlifetime = 1440 ; after this number of seconds, stored
data will be seen as 'garbage' and
cleaned up by the gc process

默认是 1440 秒,24分钟

使用 session 注意的存储路径问题

看看 php.ini 里对于 session 的设置

[Session]
session.save_handler = files ; handler used to store/retrieve data
session.save_path = /tmp ; argument passed to save_handler
in the case of files, this is the
path where data files are stored

默认是存于 /tmp 目录下,这个目录可不一定真有啊!!! 最好改为你的 php 安装路径,比如 c:/php
1 中文问题,在使用MySQL实例配置工具的使用,将使用的字符集设置为GBK,而不要设置为UTF-8
2 MySQL安装后密码无法访问问题:
mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
3 PHP有Warning
在php.ini里面找到
bug_combat_warning = 1 两行,1 改成 0
4 MySQL 对SQL插入实行更强的格式检查.所以如果某个列是整数,就不能使用''来插入.因此修改Discuz的一个函数如下
function updatesession() {
if(empty($GLOBALS['sessionupdated'])) {
global $db, $sessionexists, $sessionupdated, $sid, $onlineip, $discuz_uid, $discuz_user, $timestamp, $groupid, $styleid, $invisible, $discuz_action, $fid, $tid, $onlinehold, $logincredits, $table_sessions, $table_members, $user_lastactivity, $onlinehold;
if($sessionexists == 1) {
$db->query("UPDATE $table_sessions SET uid='$discuz_uid', username='$discuz_user', groupid='$groupid', styleid='$styleid', invisible='" . ($invisible==""?0:1) . "', action='$discuz_action', lastactivity='$timestamp', fid='" . ($fid==""?0:1) . "', tid='" . ($tid==""?0:1) . "' WHERE sid='$sid'");
if ($onlinehold && $user_lastactivity && $timestamp - $user_lastactivity > $onlinehold) {
$db->query("UPDATE $table_members SET lastvisit=lastactivity, lastactivity=$timestamp WHERE uid='$discuz_uid'", 'UNBUFFERED');
}
} else {
$ips = explode('.', $onlineip);
$db->query("DELETE FROM $table_sessions WHERE sid='$sid' OR lastactivity<($timestamp-$onlinehold) OR ('$discuz_uid'<>'0' AND uid='$discuz_uid') OR (uid='0' AND ip1='$ips[0]' AND ip2='$ips[1]' AND ip3='$ips[2]' AND ip4='$ips[3]' AND lastactivity>$timestamp-60)");
$db->query("INSERT INTO $table_sessions (sid, ip1, ip2, ip3, ip4, uid, username, groupid, styleid, invisible, action, lastactivity, fid, tid)
VALUES ('$sid', '$ips[0]', '$ips[1]', '$ips[2]', '$ips[3]', '$discuz_uid', '$discuz_user', '$groupid', '$styleid', '" . ($invisible==""?0:1) . "', '$discuz_action', '$timestamp', '" . ($fid==""?0:1) . "', '" . ($tid==""?0:1) . "')");
if($discuz_uid) {
$db->query("UPDATE $table_members SET credit=credit ".intval($logincredits).", lastip='$onlineip', lastvisit=lastactivity, lastactivity=$timestamp WHERE uid='$discuz_uid'", 'UNBUFFERED');
}
}
$sessionupdated = 1;
}
}


  PHP的功能非常强大,你可以利用它做几乎任何事。不需要复杂的变量和代码,你就可以非常迅速地做出漂亮的计数器来。下面,就让我们一步一步的来做。
  其实,计数器的原理大家都知道,首先,确定一个记录文件,例如counter.txt或counter.log,每一次访问这个页面,就对这个文件加1,然后把结果显示出来。因此,我们的PHP代码开始应该是这样的:
<?PHP
$countfile = "js/counter.inf";
//定义计数器写入的文件是当前目录下JS目录中//counter.inf,然后我们应当测试该文件能否打开
if (($fp = fopen($countfile, "r ")) == false) { //用读写模式打开文件,若不能打开就退出
printf ("Open file %s failed!",$countfile);
exit;
}
else
{
//如果文件能够正常打开,就读入文件中的数据,假设是1
$count = fread ($fp,10);
//读取10位数据
$count = $count 1;
//count
fclose ($fp);
//关闭当前文件
$fp = fopen($countfile, "w ")
//以覆盖模式打开文件
fwrite ($fp,$count);
//写入加1后的新数据
fclose ($fp);
//并关闭文件
}
  这时,整个计数工作就完成了,如果只是简单的文字计数的话,在这里就可以输出变量$count的值。下面是将$count转换为图片模式的代码:
$fp = fopen ($countfile, "r"); //以只读模式打开文件
$array_count = 1; //定义一个表示数组元素位置的变量,下面要用
while (! feof($fp)) {
$current_number = fgetc($fp);
$counter_array[$array_count] = $current_number;
$array_elements = count ($counter_array);
$array_count = $array_count 1;
}

  上面这个while循环的作用是把每一位数分离出来。它从counter.inf中由左到右逐位读取数值,并依次写入一个叫counter_array的数组中,这个数组的索引是从1开始的($array_count)。如果现在counter.inf中的数字是158,那么数组$counter_array[]就像这样:$counter_array[1] = 1、$counter_array[2] = 5、$counter_array[3] = 8。有了上面这些工作,我们就可以方便地显示不同的数字图片了,显示代码如下:
echo ("<table border=($%$43%^#ASD#2@$#f$%^)0($%$43%^#ASD#2@$#f$%^) height=($%$43%^#ASD#2@$#f$%^)5($%$43%^#ASD#2@$#f$%^) align=($%$43%^#ASD#2@$#f$%^)center($%$43%^#ASD#2@$#f$%^)><tr><td bgcolor=($%$43%^#ASD#2@$#f$%^)#bab389($%$43%^#ASD#2@$#f$%^) align=($%$43%^#ASD#2@$#f$%^)center($%$43%^#ASD#2@$#f$%^)>欢迎您,第");
  通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍PHP与数据库的连接。我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。
  PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。你的PHP安装选项应该可以支持两者的使用。
 
  连接
< ? if ($conn=Ora_Logon("user@TNSNAME","password"))
{ echo "SUCCESS ! Connected to database ";
}else
{echo "Failed :-( Could not connect to database ";}
Ora_Logoff($conn);
phpinfo();
?>
  以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。
 
  查询
  假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子:
function printoraerr($in_cur)
{
// 检查Oracle是否出错
// 如果存在错误则显示
// 当指针被激活时每次请求Oracle后调用该函数
if(ora_errorcode($in_cur))
echo "Oracle code - ".ora_error($in_cur)." ";
return;
}
if (!($conn=ora_logon("user@TNSNAME","password")))
{echo "Connection to database failed ";
exit;
}
echo "Connected as connection - $conn ";
echo "Opening cursor ... ";
$cursor=ora_open($conn); printoraerr($cursor);
echo "Opened cursor - $cursor ";
$qry="select user,sysdate from dual";
echo "Parsing the query $qry ... ";
ora_parse($cursor,$qry,0); printoraerr($cursor);
echo "Query parsed ";
echo "Executing cursor ... ";
ora_exec($cursor); printoraerr($cursor);
echo "Executed cursor ";
  再介绍一下我自己,呵呵
我是个新手,当时学php纯粹是为了应付领导哦,让我们做统计图,我本来是学asp的,突然改行很不适应,不过php功能的确很强大呀,呵呵,我都离不了他了,这不,饼图,柱型图都搞定了,可是还有很多问题我不会,还希望大家多指教呀,说了好多废话了,我还以为是在写信那
我的联系方式是:
email:qingdaohb@yeah.net
http://qdlover.yeah.net
老板催了,没办法,饼图函数出炉了,大家快抢呀
########
bimage.php3
########
<?
/*
函数说明
$chartdata:数据,是数组元素
$chartfont:字号
$chartdiameter:决定饼的大小(要看你饿不饿了,呵呵)
$chartlabel:标题,也是数组元素
$colorslice:颜色数组,例如$tmp=array255,255,255);$colorslic=array($tmp);
$colorborder:边框颜色,数组
$colortext :文本颜色,数组
$colorbody:背景颜色,数组
$file:输出图片文件名*/
function bimage($chartdata,
$chartfont,
$chartdiameter ,
$chartlabel ,
$colorslice,
$colorbody ,
$colorborder,
$colortext ,
$file
)
{
$chartdiameter=150;
$chartfontheight=imagefontheight($chartfont);
$d1=10;$d2=20;$d3=30;$d4=40;$d5=50;
$chartdata=array($d1,$d2,$d3,$d4,$d5);
$chartlabel=array("D1","D2","D3","D4","D5");
$chartwidth=$chartdiameter 20;
$chartheight=$chartdiameter 20 (($chartfontheight 2)*count($chartdata));
header("content-type:image/gif");
$image=imagecreate($chartwidth,$chartheight);
$colorbody =imagecolorallocate ($image,$colorbody[0],$colorbody[1],$colorbody[2]);
$colortext =imagecolorallocate ($image,$colortext[0],$colortext[1],$colortext[2]);
$colorborder =imagecolorallocate ($image,$colorborder[0],$colorborder[1],$colorborder[2]);
for ($i=0;$i {
$t=imagecolorallocate($image,$colorslice[$i][0],$colorslice[$i][1],$colorslice[$i][2]);
$colorslice[$i]=$t;
}
for($i=0;$i {
$charttotal =$chartdata[$i];
[!--infotagslink--]

相关文章

  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • PHP传值到不同页面的三种常见方式及php和html之间传值问题

    在项目开发中经常见到不同页面之间传值在web工作中,本篇文章给大家列出了三种常见的方式。接触PHP也有几个月了,本文总结一下这段日子中,在编程过程里常用的3种不同页面传值方法,希望可以给大家参考。有什么意见也希望大...2015-11-24
  • js修改input的type属性问题探讨

    js修改input的type属性有些限制。当input元素还未插入文档流之前,是可以修改它的值的,在ie和ff下都没问题。但如果input已经存在于页面,其type属性在ie下就成了只读属性了,不可以修改。...2013-10-19
  • Mysql常见问题集锦

    1,utf8_bin跟utf8_general_ci的区别 ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SELECT * FROM table WHERE txt = 'a'...2013-10-04
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • Mysql大小写敏感的问题

    一、1 CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的:复制代码 代码如下: SELECT * FROM TABLE NAME WHERE name='clip'; SELECT * FROM TABLE NAME WH...2015-03-15
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • PHP分布式框架如何使用Memcache同步SESSION教程

    本教程主要讲解PHP项目如何用实现memcache分布式,配置使用memcache存储session数据,以及memcache的SESSION数据如何同步。 至于Memcache的安装配置,我们就不讲了,以前...2016-11-25
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • 详解C#中的session用法

    这篇文章主要介绍了C#中的session用法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Python3使用Selenium获取session和token方法详解

    这篇文章主要介绍了Python3使用Selenium获取session和token方法详解,需要的朋友可以参考下...2021-02-17
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • C#使用队列(Queue)解决简单的并发问题

    这篇文章主要介绍了使用队列(Queue)解决简单的并发问题,讲解的很细致,喜欢的朋友们可以了解一下...2020-06-25
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15