现阶段的主要矛盾是落后的生产力不能满足日益增长的物质文化需求

注册 | 登陆
浏览模式: 标准 | 列表全部文章

Ph4nt0m Webzine 0x03

Ph4nt0m Webzine 0x03发布,看不懂这名字含义。不过文章是很好看

http://www.cncert.net/pstzine_0x03/pdf/PSTZine_0x03_0x06.pdf

以后不用mt_rand这种方法来取回密码。。试了一下,果然是这样

有个样子了

1。一个月时间,封闭了后端,模仿的zf封装一个简单的框架,zf太大,我想用只是那么一点点,看了qeephp,用了领域编程,有点不好掌握,模仿了手机之家封装了一个memcache+db的简单DAL,用的还不错,但是业务交叉比较多,表到数据库的映射不好掌握,我的程序很山寨。

2。我JS一直不行,写出这个前端还是Jquery功能NB,我在一些Jquery GPL插件的基础封装一个插件,屏蔽掉底层操作,有一些地方也分离了请求和模板,前端的样子大概是出来了,后面改动也逃不出这个大局。JS对象是鸡肋?我没发现太大的用处,但是前端还是全部用对象,我把它当成命运空间来用,挺爽的,结构看起来也清晰。

3。之前我一直考虑GB2312还是utf8,后来还是用utf8,方便,不过数据数据传输大了一些,主要就是JSON之后的汉字,我封装了前端的语言包,但是没有去用,算来算去太麻烦,上线根据情况再调整。有很多Jquery的功能好像没用,程序稳定了以后计划进行一些删减。我的前端也很山寨。

4。发现一些sns目录结构  

    /account/detail/index.php

   /account/list/index.php

   这样就可以用/account/detail/?xxx来访问。。看起来结构比较清晰,核心也肯定比较小。


3.今天是林昭41周年,缅怀那些忠于自己,勇敢的人,时光流逝,今天依然清澈。

今天没去上班

1。我睡觉一直很快,一般5分钟左右就睡着,以前在宿舍里卧谈,哥们出去洒泡尿,回来我已经睡着了。
2。毕业之后只有一次睡不着,一直莫名其妙折腾到天都快亮,睡了一会儿就去上班了。
3。昨天晚上也是,莫名其妙,不知道几点睡的,我怀疑是不是茶喝多了,早上困的不行,跟周六调了一下休。不是周六周日休息,感觉很熟悉,和以前上课的时候逃课的感觉差不多,不过逃课过了就过了,这个过了我还要补回来。

基于令牌的通行证

晚天搞到三点多,把ZF默认的目录结构做了一些修改,配置一些文件,放到SVN中

以前扯淡过一次通行证,不过当时知道的比较少,这次再扯一次,
通行证,我知道有两种,一种是cookie加密,一种是memcached做的令牌

1. cookie 小站用的比较多,问题是不支持分布,也不能解决多地登录,在不在线,还有不能放太大的数据量,毕竟每次请求都附上cookie。

2. 令牌可以解决cookie的一些问题,很多网站都在用,好处就是支持分布式,N个应用都可以自由判断用户登录没登,不好的地方的是保持不方便。
令牌一般有两组,一组只保存很少的信息:用户ID=>(登录时间,客户端IP),这个是用来快速判断。
另一组才是真正的令牌:md5(用户id+登录时间)=>其它信息,用户每次登录都会刷新这个令牌。

想过用memory表,效率太差,比较好的方法是把这两个结合起来:
在线的用户会放在memcached中,假设设置时间是60m, 过期就是不在线,可以解决在线问题。
用户本地有cookie, 如果解密成功且memcached中没有用户信息则设置,此时同一用户可以多地登录的。
如果应用程序要求比较严格,不允许多地登录,则可以用memcached中保存的客户端信息来确定当前唯一登录用户。
在线保持还会有一个效率问题,因为要刷新在线时间,保持状态,不过比较好解决,简单的就是设置长一点过期时间和随机刷新。

总体上来说:
cookie: (rc4或xxtea) 用户ID, 登录时间戳
memcache第一组:用户ID=>(登录时间,客户端IP(更严格一点可以包括浏览器信息))
memcache第二组:md5(用户id+登录时间)=>其它信息

这样做有一个很不好的地方,增加了其它应用判断是否登录的复杂度,以前只要检测memcached就可以了,现在还要检查一下cookie, 不过借助于js的还是比较容易解决。

另外,这样会有一些安全问题,比如用户改了密码以后,原来的cookie还能用,这个问题解决应该和全站安全一起考虑,用户在注册的时候随机生成的key,位数可以少一点,这个key是用来确认客户端cookie有效的,也可以用来防止跨站请求伪造,也可以md5的时候加上,形成双密码保护,功能多多。。

Tags: 通行证

hello world

一个起步教程

可能教程的版本比较旧

Python代码
  1. from django.utils.httpwrappers import HttpResponse  
  2.   
  3. def index(request):  
  4.     return HttpResponse("Job Index View")  

1。httpresponse已经挪到django.http下面了,放在__init__.py这个感觉没什么用的文件里,找了好一会儿

框架的文件全放在site-packages里面,没想到和zf差不多,传入request对象,输出response对象

2。egg是什么格式

3。昨天清理笔记本,有二颗螺丝滑丝了,死按拧上了一个,用了快二年。宽裕的时候换一个。

开始web py部分

今天把django,NND,这个单词我还不会拼,给装了,没用nginx,担心把我的php环境给搞坏了,用他自带的那个web server,

http://yuehei.37net.com:8080/

1。现在一头雾水,以前用php就是开启fastcgi监听,web server转发处理响应,然后把框架布署在目录里,django把这些东西都放在一起,我茫然了,迷茫了,找不前进的方向了,恶。。

2。试了一下php gtk,这种鸡肋的东西,除了证明一下PHP能写桌面也没别的用了。

3。wxpython GUI组件 http://www.ibm.com/developerworks/cn/linux/sdk/python/wxpy/

4。PHPRPC 比 soap之类的东西简单多了,好用多了。。就是页面太艺术。。

mod:将解释器加载为web server 的一部分

cgi:每次接受请求解释器都会初始化,比较消耗资源

fastcgi:会生成解释进程,常驻内存,速度比较理想

cli:php安静模式,一般在命令行下用

饿了,撤

网址记录

http://www.javaeye.com/post/886707?page=11

 一直不订javaeye的blog,几个血红大字,还有血红的推荐。

这里记录

update:09/02/23

http://www.javaeye.com/topic/141889

还是订了,这里记那个论坛的文章

 

五六节

类和异常与文件处理,没什么特别的。。很想睡觉,困

py类中的变量就相当静态变量

Python代码
  1. from UserDict import UserDict  
  2. class dict(UserDict):  
  3.     data = {}  
  4.     num = 0  
  5.     def __init__(self, data={}):  
  6.         if (data is None):  
  7.             data = {}  
  8.         else:  
  9.             self.data.update(data)  
  10.             self.num+=1  
  11.     def addNum(self, num):  
  12.         self.__class__.num+=num  
  13.     def items(self):  
  14.         return self.data.items()  
  15.     def keys(self):  
  16.         return self.data.keys()  
  17.     def values(self):  
  18.         return self.data.values()  
  19.     def getClass(self):  
  20.         return self.__class__  
  21.     def __setitem__(self, key, values):  
  22.         key = "s_"+str(key)  
  23.         self.key = values  
  24.     def __getitem__(self, key):  
  25.         key = "s_"+str(key)  
  26.         return self.data[key]  
  27. d = dict({"aa":"bnb"})  
  28. d.addNum(4)  
  29. print d.num  
  30. e = dict()  
  31. print e.num  
  32. print dict.num  
  33. print e.data  
  34.   
  35. #d['fdsad'] = 'fdas'  
  36. #print dir(d)  
  37. #k = {}  
  38. #k["a"] = "a"  
  39. #k["b"] = "b"  
  40. #print k.a  
  41. #del k["a"]  
  42. #print k  
Python代码
  1. try:  
  2.     fh = open('D:/music/KuGou/寒衣调.mp3''rb')  
  3. except Exception:  
  4.     print 'error'  
  5. else:  
  6.     print 'ok'  
  7. #print fh.name  
  8. #print fh.mode  
  9. #print dir(fh)  
  10. #print fh.tell()  
  11. fh.seek(-10242)  
  12. #print fh.tell()  
  13. data = fh.read(1024);  
  14. #print data  
  15. #print fh.closed  
  16. fh.close()  
  17. #print fh.closed  
  18.   
  19. try:  
  20.     fh = open('D:/project/a.txt''wb')  
  21.     fh.write("aaaaaa")  
  22.     fh.close();  
  23.     #print file('D:/project/a.txt').read()  
  24. except IOError:  
  25.     pass  
  26. print file('D:/project/a.txt').read()  
  27.   
  28. #import sys  
  29. #print "\n".join(sys.modules.keys())  
  30. import os  
  31. print os.path.expanduser('~')  

Tags: python

Records:4012345