21

织梦网站管理系统禁止会员同一帐号多地登录

修改织梦网站管理系统PHP程序,实现禁止同一会员帐号多地登录,一般来讲就要从判断IP入手。我修改的这个原理是:会员登录后增加创建名为Only的cookie,当会员刷新页或浏览新页面时判断从数据表@_member中当前会员的loginip值md5后与Only比较异同,把此条件加在验证用户是否已经登录函数IsLogin()中,成立返回真,不成立返回假,即可实现。修改如下:

修改文件/include/memberlogin.class.php

构造函数,大约171行左右的$this->OnlyCookie = GetCookie("Only");代码下一行增加代码如下:
$this->OnlyCookie = GetCookie("Only");

验证用户是否已经登录函数IsLogin(),大约第290行 改为
function IsLogin()
{
$loginipCookie = substr(md5($this->fields['loginip']),0,16);
if($this->M_ID > 0 && $this->OnlyCookie == $loginipCookie) return TRUE;
else return FALSE;
}

重置用户信息函数ResetUser()内的最后,大约第389行左右代码DropCookie('DedeLoginTime');的下一行增加代码如下(除管理员外的cookie方法):
DropCookie('Only');
意为重置会员cookie信息

大约第530行左右保存用户cookie的函数PutLoginInfo()内的if($this->M_KeepTime > 0)内增加代码如下(除管理员外的cookie方法);
PutCookie('Only',substr(md5(GetIp()),0,16),$this->M_KeepTime);
意为增加cookie条目
下面的else内最后加上
PutCookie('Only',$this->M_LoginTime);

修改文件/include/userlogin.class.php(这个没有测试管理员的帐号效果,后来我没我修改这条,也就是说这条改不改不影响除ID为1的其他会员的禁止多地登录效果)
keepUser()函数内大约第315行增加代码如下:
PutCookie('Only', substr(md5('MrDede'.GetIp()),0,16), 3600 * 24, '/');
保持用户的会话状态,这里给管理员(id=1)增加了名为Only的cookie信息

20

php模拟用户自动在qq空间发表文章的方法

 

21

PHP创建TXT文件

fwrite(file,string,length)

file     必需。规定要写入的打开文件。
string     必需。规定要写入文件的字符串。
length     可选。规定要写入的最大字节数。

fwrite() 返回写入的字符数,出现错误时则返回 false。

fclose(file)

file 参数是一个文件指针。fclose() 函数关闭该指针指向的文件。如果成功则返回 true,否则返回 false。

Posted in PHP
21

PHP函数获取客户端真实IP方法

两种PHP写法获取客户端真实IP方法:

本地测试获取的IP一般为::1这是正常的,在远程服务器中此方法是可用的

Host映射查看方法 C:\Windows\System32\drivers\etc  文件hosts

由于客户端可以篡改IP,所以在使用此方法获取的IP要进行过滤。

下面是获取到的客户端IP再获取客户端的地理信息(省份、地区、经纬度)

 

20

JS获取当前域名

<script language="javascript">
//获取域名
host = window.location.host;
host2=document.domain;

//获取页面完整地址
url = window.location.href;

document.write("<br>host="+host)
document.write("<br>host2="+host2)
document.write("<br>url="+url)
</script>

20

jQuery对象与dom对象相互转换

什么是jQuery对象?

—就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的,其可以使用jQuery里的方法。

比如:

$("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法

这段代码等同于用DOM实现代码:

document.getElementById("id").innerHTML;

虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会报错。比如:$("#test").innerHTML、document.getElementById("id").html()之类的写法都是错误的。

还有一个要注意的是:用#id作为选择符取得的是jQuery对象与document.getElementById(“id”)得到的DOM对象,这两者并不等价。请参看如下说的两者间的转换。

既然jQuery有区别但也有联系,那么jQuery对象与DOM对象也可以相互转换。在再两者转换前首先我们给一个约定:如果一个获取的是 jQuery对象,那么我们在变量前面加上$,如:var $variab = jQuery对象;如果获取的是DOM对象,则与习惯普通一样:var variab = DOM对象;这么约定只是便于讲解与区别,实际使用中并不规定。

jQuery对象转成DOM对象:

两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index);

(1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。

如:var $v =$("#v") ; //jQuery对象

var v=$v[0]; //DOM对象

alert(v.checked) //检测这个checkbox是否被选中

(2)jQuery本身提供,通过.get(index)方法,得到相应的DOM对象

如:var $v=$("#v"); //jQuery对象

var v=$v.get(0); //DOM对象

alert(v.checked) //检测这个checkbox是否被选中 Continue reading

10

CSS(background)背景色渐变

垂直渐变:上->下
垂直渐变:下->上
水平渐变:左->右
水平渐变:右->左

IE系列

filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr='#00BFFF',endColorStr='#0000CD',gradientType='0');

参数:startColorStr起始颜色 endColorStr结束颜色 gradientType为0时代表垂直,为1时代表水平

Firefox

background: -moz-linear-gradient(top, #00BFFF, #0000CD);

参数:top、bottom垂直,left、right水平 例如:top时从顶部由#00BFFF到#0000CD渐变,bottom时从底部由#00BFFF到#0000CD渐变

Opera

background: -o-linear-gradient(top,#00BFFF, #0000CD);

参数:top、bottom垂直,left、right水平 例如:top时从顶部由#00BFFF到#0000CD渐变,bottom时从底部由#00BFFF到#0000CD渐变

webkit,如Chrome、Safari等

background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#00BFFF), to(#0000CD));

参数:linear线性, x1 x2, x3 x4 x1与x3相同时垂直,x2与x4相同时水平 from起始颜色 to结束颜色

07

使用JS改变a标签中的href链接与图片src链接方法

一、原生JS直接改变a标签链接与图片src链接(JS一定要在欲改变的源码之后加载)

原始图片是tulip.jpg,改变后的图片myimg.jpg。
a标签改变后的链接是http://mrdede.com/

二、引入jQuery方法改变a标签链接与图片src链接(应该是任意jQuery版本都可以,JS一定要在欲改变的源码之后加载)

原始图片是tulip.jpg,改变后的图片myimg.jpg
a标签改变后的链接是http://mrdede.com/
原始文本是“织梦先生”,改变后文本是“百度”
其中加了判断,当前可使用屏幕宽度小于768时,改变图片链接、a标签链接和文本内容。

25

织梦图集模型增加数据类型为“HTML文本”的自定义字段 发布着色内容出错

织梦二次开发,一是让系统更适合自己,为我所用;二是没有绝对完美的东西,修改它的BUG。

织梦图集模型增加数据类型为“HTML文本”的自定义字段 发布着色内容出错,表面上看是这样的,但实现上是在打开修改图集内容页时的返回值出错,再准确一点说,是HTML文本在修改查看时被过滤了一次而出错(把原来的<span style…替换成了<span x=”">yle…)。

dede_addonimages数据表中是正确的

dede_addonimages数据表中是正确的

20150625035610 20150625035643

因为在发布完图集内容后,我查看数据表dede_addonimages数据内容,是正常并正确的。所以问题就不是出在发布的环节,也没必要研究/dede/album_add.php这个文件了(之前我走了弯路)。

(到这一步之前也走了一些弯路)那么现在就来研究/dede/album_edit.php这个文件,发现是$addRow=XSSClean($addRow);这句在作怪,注释掉,OK!

20150625041905

整个56行$arcRow=XSSClean($arcRow);$addRow=XSSClean($addRow);都可以注释掉。之所以说这行都可以注释掉是因为在文章模型的修改文档文件(/dede/archives_edit.php)中就没有这各方法过滤,根本就没有出现XSSClean()方法。

其它,那个过滤规则最终是指向\include\helpers\filter.helper.php的RemoveXSS方法的,没去细研究。

天亮了,睡了……

24

HTML5+JavaScript实现仿微信摇一摇效果

在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态、加速度等数据(另还有deviceOrientation事件提供了设备角度、朝向等信息)。

而通过DeviceMotion对设备运动状态的判断,则可以帮助我们在网页上就实现“摇一摇”的交互效果。

事件监听

演示地址(手机浏览):http://mrdede.com/UploadFiles/demo/js/shake/demo.html

把监听事件绑定给 deviceMotionHandler

获取设备加速度信息 accelerationIncludingGravity

将加速度信息打印置页面,通过演示地址可以看到随着设备的移动,屏幕上数字的变化。

 

摇晃判断

演示地址(手机浏览):http://mrdede.com/UploadFiles/demo/js/shake/demo_1.html

“摇一摇”的动作既“一定时间内设备了一定距离”,因此通过监听上一步获取到的x, y, z 值在一定时间范围内的变化率,即可进行设备是否有进行晃动的判断。而为了防止正常移动的误判,需要给该变化率设置一个合适的临界值。

100毫秒进行一次位置判断,若前后x, y, z间的差值的绝对值和时间比率超过了预设的阈值,则判断设备进行了摇晃操作。

 

然后通过上面2个演示,然后再增加点样式效果,即可模拟一个简单的微信摇一摇界面。

应用演示:简易模拟微信摇一摇

演示地址(手机浏览):http://mrdede.com/UploadFiles/demo/js/shake/demo_2.html