【搬家】WebChat网络聊天室开发笔记

2024-06-12 19:54:04
//原文发布在我原来的blog,原文发布时间:2012.5.15
网页聊天室:
1.登陆注册功能———–*
2.即时消息—————*
3.私聊,聊天记录保存
4.表情
5.在线用户列表———–*
6.用户头像上传
7.查看个人信息———–*
实现:
1.mysql,session/cookie
2.ajax/comet
3.mysql
4.待议
5.session,mysql
6.插件,jquery
7.mysql
具体实现:
mysql:
1.用户列表
uid,user,passwd,isonline,sex,email,regtime,head_add,information
2.私聊消息表
message_id,message_time,from_id,to_id,message_text
php:
3层结构
数据库层:输出数据库查询内容
php层:
html层:
html:
界面:
1.登陆
2.注销
3.聊天主页面
4.用户列表
5.个人信息
6.私聊
发现的问题:
1.GD库支持,导致验证码读取不出来
解决方法:正在尝试,或者试试phpnow。经分析并不是集成开发环境出的问题,但具体问题仍没发现,所以依旧使用以前的验证码模块
2.验证码存在session中,可被破解,导致暴力破解
解决方法:可以使用MD5加密后的验证码放入session中,进行对比验证
3.session使用问题
建立、删除cookie,session_start();函数必须放在首行,所以放在dbconnect.php中。
setCookie(‘usename’,’’,time());一共3个值
4.面向对象的开发思想,在本系统体现不明显。
5.界面设计,本想使用小七的jquery的界面,但是在IE下显示效果不佳。所以可以自己设计。
6.在类的调用上出现问题
7.Cookie调用不太会用,而且有安全性问题,改为session
8. session依旧有问题,参数传不到第二个页面,还有就是可以使用cookie存储session。
但是超时时间问题没有解决。对于传参,我的代码应该是没有问题的,但就是不行!!!
解决方案:搞了半天是大小写问题,原本以为php对于大小写和编写方式很开放的。SESSION_[‘’]这样表示。
9.顺利把zvchat植入,然后修改javascript,把用户名的植入方式改变。但发现一个问题,就是可以同时使用同一个账号登陆。
解决方案:可以通过ip地址判断,结合是否在线。或者取消此功能,web上使用这个容易出问题
10.在线用户列表,可以使用session记录登陆时间,设置超时时间,判断在线状态,还有就是使用javascript在用户关闭浏览器时向服务器发出下线请求。但我想可以在数据库建立一个在线用户表,或者把用户表进行改造,最好还是新建一个表,毕竟用户量大,查询是费资源的。记录登陆时间,在切换网页时更新最后在线时间,或者每30s进行查询。
或者另一种方案,就是使用session配合数据库,另作一个php页面,每60s刷新,并更新数据库,如果用户直接关闭浏览器,就配合session超时时间。session.cookie_lifetime =0
在php.ini中,值为0则为关闭浏览器后,session超时。
具体解决方案,可以登录后,把session_id等值存储到数据库,之后写一个php文件,加载到每个文件头部,通过查询sesion_id查询当前用户是否存在,存在的话,更新数据库在线人数,不在的话,删除信息。退出时删除信息。异常关闭浏览器也可以检查到。另外数据库中得记录最后在线时间,进行超时判断。
整理方法:
方法一:
1.登录、退出,存储session_id、用户名、最后在线时间,到数据库,退出删除。

2.在线时,每30s更新数据库的个人信息。

3.读取数据库个人信息,通过时间判断,最后登录时间超过60s,则为离线,删除此条目。并列出在线用户列表。
方法二:

1.            同方法一

2.           读取数据库,通过数据库session_id值,查询是否有此session值,如果有,则为用户在线,没有则为不在线,并删除此条目。

3.           读取数据库,形成在线用户列表。

形成在线用户列表后,还可以进行同一账号重复登录的判断。
方法二如果用户量大,数据库操作量会很大,方法一相对实用。
11.使用一个单独的updata.php页面,用meta设置刷新时间,后面跟着sql语句,每30s刷新数据库中的最后使用时间,并且检查数据库中的时间与当前时间相差40s以上的条目进行删除,达到时时更新在线人数的作用,唯一缺点就是数据库的访问量增大,但是小型网站还是没问题的。

12.delete from online where session=(select * from online where sess_time > subtime(now(),’00:40′))

这个语句mysql不支持,但select * from online where sess_time > subtime(now(),’00:40′)

是支持的,得改变下形式。

解决方案:在保林的提点下,我突然发现我犯了一个特别sb的错误,根本没必要写的那么复杂,直接delete from online where sess_time < subtime(now(),’00:00:40′);就可以了

13.计算在线时长,数据库的基础已经完成,就差一条查询语句,便可计算在线时长,之后可以计算出等级。
14.写出一个查询在线用户的页面,使用iframe插入chat中div,进行定时刷新查询。可以通过控制刷新时间,来调整在线用户列表的反应状态。
15.出现个BUG,限制同一个账户登陆,是用的数据库在线列表,但当前只有一个人时,采取直接关闭网页方式下线,那他的登陆信息就存在了数据库中,这样,就认为当前用户已经登录,所以会限制登陆。解决方案,先检查数据库是否存在超时。
16.对于zvchat核心显示聊天时间不准确的情况,经分析,zvchat 使用的time()是unix时间戳的意思,所以就算格林威治时间,调整的话,就把这个时间加8个小时,也就是28800秒,就完美解决这个问题了。
17.表单验证问题,还没有解决,似乎硬盘突然出问题之前还可以用呢,现在就不行了,到底哪里出问题了,shit!!!
感觉像是javascript出问题了,没反应,这个有待验证,中午关机重启,不行就试试换一个电脑试试看。先解决在线时长问题吧。
18.之前的头像上传功能也解决了,是用的一个从UCenter上分离出来的图片上传模块,不自己写这个,一个是自己懒,另一个是别人的好看。
19.表单功能完成,应该是可以用完美来形容,嘿嘿!接下来把头像功能实现一下。
发现头像上传路径是多重路径的, 比如webchat\headuploads\000\00\00\01_avatar_big.jpg,这里面文件夹的数字+文件名的数字部分就是uid的值,通过这种方法使每个文件夹存放的图片不至于过多,应该还有搜索效率方面的问题。这个在文件中是有函数的,直接调用就可以了,现在困了,有时间再解决。
20.目前仍需解决的问题汇总:
A.在线时间统计
B.数据库中时间部分全改成UNIX时间戳
C.注册表单检查
D.图片存储路径部分调用
E.界面优化

21.在线时间统计和UNIX时间戳改造已经完成,在线时间统计主要问题是多表联合更新问题,mysql不支持update…from…但它可以支uptate online,webchat_id set webchat_id.onlinetime=webchat_id.onlinetime+online.sess_time-online.login_time where webchat_id.uid=online.sess_uid 这种形式,就是多表联合查询。

22.使用UNIX时间戳的主要目的就是方便时间的计算,可以使用int格式类型,省了datatime类型比较麻烦的计算函数。
23.注册界面的js验证表单,就是现实不出来,真服了,类似的表单,change.php就没问题,先考虑下个问题,就是头像路径的问题。
24. php5.1以上时间戳会与实际时间相差8小时,解决办法如下
1、最简单的方法就是不要用php5.1以上的版本–显然这是不可取的方法!!!
2、修改php.ini。打开php.ini查找date.timezone 去掉前面的分号= 后面加Asia/Shanghai,重启apache服务器即可–缺点就是如果程序
放到别人的服务器上,不能修改php.ini,那就奈何不得了。

3、在程序中添加时间的初始化的语句的 即:“date_default_timezone_set(“Asia/Shanghai”); ”这个可以由程序员任意设置,我的推

荐。
时区标识符,大陆内地可用的值是:PRC,Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为中国,重庆,上海,乌鲁木齐) ,Etc/GMT-8,Asia/Harbin
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)
还有新加坡:Asia/Singapore
澳大利亚:Australia/Sydney
25.不会php的面向对象真费劲,改一个头像上传都改不出来,头疼啊,只能限定上传图片的类型了,改成只能JPG的,这样数据库都可以不用了。
这个图片格式的问题不用考虑了,在上传图像并裁切的过程中已经转化为JPG了,另外已经封装好了一个图片类,直接调取图片类就行了
Is_file()函数判断该路径下的文件是否存在,没有则返回false,进行判断,false则指定默认头像
26.注册界面的js验证表单代码解决了,就是拿正常用的那张直接拿来修改了,懒的查错了。
27.功能上基本就是完成了,剩下的工作主要有2项,一个是代码优化,就是一些常用的代码,就写到function.php中,到时直接调用,也可以多看看怎么去使用面向对象编程,还有就是写一个在线时间转化为等级的类。第二项就是对界面进行优化,使用表格重新修改网页结构,css什么的都重新写,再加一个用户信息的页面,添加头像显示。
28.整体上对代码进行优化组合,重新划分文件结构。还有就是私信的发送与接受,这个也得实现了,这个可以借助数据库来实现。
29.使用dreamweaver修改网页时,发现new.php的注册中,用户信息不能插入数据库。看语句是没有问题的,头疼啊。
诡异的问题,莫名其妙就又行了,真服了。。。
终于找出怎么回事了,原来数据库email项设成唯一了,用相同email注册就不行!!
一直在sql代码上找问题,原来是数据库的问题,唯一属性删之。
30.开始前台设计,尺寸由于宽屏普及,设计为1050*542
31.前台设计好难啊,真想就搞后台
32.2天没弄了,一直在配置ubuntu12.04,才把桌面给弄崩溃了,回到windows,搞网站吧,先改改聊天框,看看怎么能把聊天记录从下面开始,之后,做2个页面,一个是后台,管理权限和删除用户,第二个是个人信息,通过uid判断是否为当前用户,以显示修改按钮。
33.写出了个人信息,还有后台控制的页面,但没有和修改信息页面进行衔接起来,所以,最好重新写一个修改个人信息的页面,风格就是新的风格。
34.iframe问题还没有解决,怎么把页面传过来的,这个有待研究,还有就是,如何把iframe中的转址转到外面,后台上,把留言板设计好。
35.之前把网站修改了一下,把留言功能删掉了,时间太紧张来不及弄了,活跃用户也没了,现在的还是很简单的,不过效果还不错,感觉挺好,等之后再把整体色调,风格调一下,基本上就没有问题了,有空写一下功能文档还有文件功能什么的就可以了,有时间再把消息功能开发出来,这个就算是可以完工了。
36.说说写这个网站的感受吧,从5月3日晚上到5月15日早上,这些天基本都是夜里写网站白天睡觉,上午有课还去上课,下午到晚上才休息,太累了,以至于感觉这些天身体都变差了很多,以后没事不能这样了,才看了看这个月的安排,还有密码学课程设计和android软件设计,android软件估计完成不了了,密码学课程设计应该没问题,这两个都是用java,反正得学java,顺便的事。另外这两天给北京几十个公司投的简历,已经有七八个给我回消息了,但因为现在不在北京而未果,有些遗憾,但从另一方面说也是给自己一个充分准备的时间,毕竟现在的知识很贫乏,笔试面试比一定可以过,所以到暑假还有2个月时间去充分的准备,主要在2个方面努力,一是java方面,深刻的去学习和理解,二是基础知识,必须把自己的基础夯扎实,这块是自己最薄弱的部分。其实去投简历就是证明自己并不是一无是处,只是肯定一下自己还不算废柴,但未来的发展史需要自己努力的,加油!!!

转载于:https://blog.51cto.com/guanye/937079

【搬家】WebChat网络聊天室开发笔记相关推荐

  1. 仿微信的网络聊天室项目开发【完整源码讲解】

    目录 总体开发思路 服务器端 服务器界面设计 建立TCP服务器端通信 建立服务器消息发送输出流 建立服务器消息接收输入流 建立服务器实时消息通信线程 设置服务器通信自由断开 客户端 客户端界面设计 建 ...

  2. 视频教程-Java基础中国象棋和网络聊天室Swing开发-Java

    Java基础中国象棋和网络聊天室Swing开发 IT行业资深从业者,7年资深Java高级开发,Java架构师.曾就职银行.电信等行业多家上市公司.担任项目负责人,软件架构师.有丰富的高并发.分布式系统 ...

  3. 【Vaadin教程】利用IDEA开发基于Vaadin网络聊天室程序

    为什么80%的码农都做不了架构师?>>>    利用Vaadin,我们可以轻松的开发出丰富的web界面,像写Swing一样写GUI,感觉什么extjs之类的弱爆了!下面是我做的一个网 ...

  4. java_OA管理系统(一):Servlet总结案例仿网络聊天室

    因为我们学校的软件联盟要为我们校区开发一个OA系统,为此我将其所需要的一些技术进行汇总,以便web组组员开发所用. 第一篇是关于Servlet的一个汇总案例,算是开个简单的小头. 一.总述 代码来源于 ...

  5. 网络聊天室的技术与发展

    网络聊天室的技术与发展 摘要: 此文讲述了视频聊天网站相关的技术.发展过程.从客户那里了解到了很多的视频聊天相关的需求,经过自己长时间对视频聊天网站运营模式.盈利模式.系统架构以及相关技术的研究,写下 ...

  6. 基于Java socket的网络聊天室的设计与实现

    目 录 摘要 I Abstract II 目 录 III 1 引言 1 2 网络聊天室的简介 2 2.1网络聊天室现状和发展 2 3 完成网络聊天室的技术以及环境 4 3.1 Java的介绍 4 3. ...

  7. 网络聊天室(Java)

    摘要 本文阐述了基于Linux环境,Java语言实现的基本聊天室功能,涉及Linux下的Java 语言的Socket编程.以及Java语言的多线程编程. 关键字 Linux         Java  ...

  8. linux点对点聊天室的实现与设计心得,基于Socket接口的Linux与Windows网络聊天室设计与实现...

    陈洁 孟晓景 摘要:为了实现Linux与Windows跨平台通信,及时共享信息,构建了一个适用于跨平台的网络聊天室通信程序.先搭建跨平台通信环境,然后使用Socket套接字网络编程接口实现通信.整个系 ...

  9. 视频教程-多人网络聊天室-Unity3D

    多人网络聊天室 广州市码锋网络有限责任公司创始人,从事游戏开发九年,熟练前后端的各种技术,我很乐意将企业中商用的技术分享给你,帮助你解决工作的各种问题. 官剑铭 ¥39.00 立即订阅 扫码下载「CS ...

最新文章

  1. linux下ioctl遇到的坑
  2. 【转载】送到榨油厂的飞鸽传书
  3. python列表转dict
  4. fckeditor异常总结---The server didn‘t reply with a proper XML data. Please check your configuration.
  5. Nginx正确记录post日志的方法
  6. guid主键 oracle_关于ORACLE的GUID主键生成
  7. Pycharm汉化包+操作步骤
  8. 【NLP】文本情感分类
  9. 发送通知java带阿妈_变成了阴阳师的阿妈以后-阿妈回归(退坑通知)-变成了阴阳师的阿妈以后小说|变成了阴阳师的阿妈以后小说下载|SF轻小说...
  10. SEC再收中国互金企业招股书 融360成立简普科技拟融资2亿美元
  11. # C#程序设计习题_1(西安交通大学)
  12. 个人网络信息安全管理方法分享
  13. 你也可以看懂,量子力学的困惑,测不准原理 薛定谔的猫 !
  14. 克转换成千克怎么算python_如何在Python中将磅转换为千克
  15. 播放器、直播平台、OBS相关测试
  16. 微信24小时客服热线电话/如何转到人工服务办理
  17. python 仪表盘实现_【Python代替Excel】11:用Python做数据仪表盘
  18. 奇安信SSL VPN详细配置步骤
  19. Android 四大组件之BroadcastReceiver
  20. 如何设计一个开放平台openapi?

热门文章

  1. Stata新命令-prodest:不再畏惧生产函数
  2. 达芬奇调色软件:DaVinci Resolve Studio 18 Mac中文版
  3. 一文了解AI智能机器人的应用及特点
  4. 网页短信后台开发 短息系统平台定制 web版定制 平台源码架构 短信源码开发升级接入SMPP通道
  5. 小程序服务器搭建前后端交互,手把手带你搭一个简单的微信小程序(包括前后端)...
  6. QT5.9实现一个视频播放器播放 暂停进度条
  7. Drupal theme-1
  8. Android的语言设置(一)
  9. 效率提升:使用AppleScript模拟鼠标键盘操作制作自动化工具
  10. css里的padding什么意思,最详细的padding_css padding用法解析