解决方案 »
- 话说 有人在用2003系统嘛...
- 跪求PHP提取access数据库中的内容并添加到mysql数据库中的方法?
- NetBeans6.9有没有支持SMARTY的编辑插件啊
- zabbix 在windows 2003如何安装,我安装了XAMPP,现已安装好zabbix用的数据库
- 这个怎么样?
- onchange当<options>选项只有一个时怎么实现
- apache+php架设(配置文件连接PHP出错,哭着求高手指点)
- php如何表示正整数?手册上怎么没有相关函数!
- if (session_is_registered("ses_fs_userid"))检测已经注册并赋值了,但为什么还输不出来呢?
- allen830826 进来拿分
- php通过header函数来做下载地址比较慢
- 求救,PHP这样的批量更新应该怎么做?
原贴
主要问题是sess_write()函数没有对数据库里面是否存在sesskey作验证,每次都是直接insert,那个贴里的代码我有做测试.function sess_write($key, $val) {
global $SESS_DBH, $SESS_LIFE;
$expiry = time() + $SESS_LIFE;
$value = addslashes($val);
$qry = "SELECT * FROM `sessions` WHERE sesskey = '$key'";//查找是否有记录
$qid = mysql_query($qry, $SESS_DBH) or die("query Error."); //结果
if (mysql_num_rows($qid) > 0) {//有记录则更新
$qry = "UPDATE sessions SET expiry = '$expiry', value = '$value' WHERE sesskey = '$key' AND expiry > " . time();
}
else{//无记录插入
$qry = "INSERT INTO sessions VALUES ('$key', $expiry, '$value')";
}
$qid = mysql_query($qry,$SESS_DBH);
return $qid;
}
$SESS_DBHOST = "localhost"; /* database server hostname */
$SESS_DBNAME = "h_guochan"; /* database name */
SSESS_DBUSER = "root"; /* database user */ 这一行是有错误的,$符号没了如果你仅仅是因为session不能跨域而使用session的话,那么你完全可以用cookie来替代session,至少cookie可以跨域,这一点你可以下载一个php使用手册详细阅读一下cookie的部分.如果你的浏览器丢失sessionid,那么你只需要获取一次sessionid,然后把它作为参数不断传递下去就好了,这样就不会出现第二个sessionid了.还有就是在insert数据库之前要先select一下,查询看看有没有记录过sessionid,不要不断插入,浪费资源.
if($_GET['sessionid']!=''){
$sessionid = $_GET['sessionid'];
else{
$sessionid = session_id();
}//设置并使用SessionID
Session_id($sessionid); 这样就行了,只不过所有的操作你都要使用get方法传递$sessionid的值
#3 的说法是多余的。因为 sesskey 是主键,当插入失败(主键已存在)时就进行修改,逻辑上市说的过去的。当然,使用 replace 指令更为妥当2、既然是本地可以,而服务器不可以。就不存在 sessionid 的传递问题
你需要检查服务器端的有关 session 的设置,如果 session 被设置成自动时,你这样做就不行了3、session 是否能跨域,与是否存放在数据库无关
跨域是通过设置 session.cookie_domain 来完成的