问题描述
给Session设置过期时间,关闭浏览器,Session并不会失效,重新打开浏览器,会新建一个Session,但之前那个Session还在,我想用户重新打开浏览器再调用之前这个Session,我做投票功能,希望一个用户一天只能投一次票。(思路我已大概了解了,需要看一下调用的简单代码,在后台怎么调用之前的Session,Session.SessionID)
解决方案
解决方案二:
SessionId是唯一的,重新打开浏览时会生成新的SessionID关于做投票系统直接判断外网的IP就行!防止一个局域网无限刷票
解决方案三:
没有用户名密码你如何知道是否是同一用户访问。有了用户名密码,那还要Session何用,每个用户名一天一次即可。现在的防刷票,除非注册和投票有门槛,不然都是防君子防不了小人
解决方案四:
你可以通过cookie来解决这个问题。
解决方案五:
引用3楼hanjun0612的回复:
你可以通过cookie来解决这个问题。
cookie更不靠谱,随便删
解决方案六:
改用cookie吧,浏览器关闭后再打开向服务端提交数据时只会带上未过期的cookie不会带上sessionid。
解决方案七:
锁IP地址
解决方案八:
引用2楼xdashewan的回复:
没有用户名密码你如何知道是否是同一用户访问。有了用户名密码,那还要Session何用,每个用户名一天一次即可。现在的防刷票,除非注册和投票有门槛,不然都是防君子防不了小人
因为是匿名投票,不用注册的,所以想用sessionID做判断
解决方案九:
引用7楼zhushijie123的回复:
因为是匿名投票,不用注册的,所以想用sessionID做判断
那你只能根据ip地址来判断是否同一用户,而且我也说了这样做只能防君子,ip是可以换的
解决方案十:
引用4楼wangjun8868的回复:
Quote: 引用3楼hanjun0612的回复:
你可以通过cookie来解决这个问题。cookie更不靠谱,随便删
现在不是很多网站用Session和cookie一起使用来保持用户再打开浏览器里的登录状态的,他们是怎么解决安全问题?
解决方案十一:
sessionID是不可能实现“一个用户一天只能投一次票”,相反cookie才是你的需要。任何轻易改变、获得的信息作为判断的,都是君子判断。
解决方案十二:
引用1楼wangjun8868的回复:
SessionId是唯一的,重新打开浏览时会生成新的SessionID关于做投票系统直接判断外网的IP就行!防止一个局域网无限刷票
怎么获取外网IP和MAC地址?
解决方案十三:
引用10楼fei2yun的回复:
sessionID是不可能实现“一个用户一天只能投一次票”,相反cookie才是你的需要。任何轻易改变、获得的信息作为判断的,都是君子判断。
session不可能,cookie一样可以改,怎么办?
解决方案十四:
引用12楼zhushijie123的回复:
Quote: 引用10楼fei2yun的回复:
sessionID是不可能实现“一个用户一天只能投一次票”,相反cookie才是你的需要。任何轻易改变、获得的信息作为判断的,都是君子判断。session不可能,cookie一样可以改,怎么办?
可靠性(递增)session->cookie->IP->User、微信、微博、QQ、邮件等第三方帐号->手机短信信息级别不一样,那需求也不一样,根据自己的需要去做
解决方案十五:
调用不了的,当浏览器关闭之后,seesionID就会掉失。。你可以把投票行为记录在COOKIES内面也行。。如果,你要真正的做到不让用户作假的。。就需要记录在数据库内面。。用户投票之前检查数据库记录
解决方案:
cookie保存客户信息对cookie进行加密也没这么多人无论去破解一个投票的吧
解决方案:
引用14楼CSMSDN的回复:
调用不了的,当浏览器关闭之后,seesionID就会掉失。。你可以把投票行为记录在COOKIES内面也行。。如果,你要真正的做到不让用户作假的。。就需要记录在数据库内面。。用户投票之前检查数据库记录
没懂,记录什么东西在数据库里?seesion吗?用户重新打开浏览器后是新建的seesion的啊
解决方案:
引用1楼wangjun8868的回复:
SessionId是唯一的,重新打开浏览时会生成新的SessionID关于做投票系统直接判断外网的IP就行!防止一个局域网无限刷票
怎么获取外网IP?用Request.UserHostAddress吗?
解决方案:
引用6楼zhuankeshumo的回复:
锁IP地址
解决方案:
外网IP也不靠普,现在的个人用户一般都是动态ip,重新拨号,ip就变了。如果是匿名投票,可以的话发送手机验证码之类的,不行的话,用ip还是用cookie就无所谓了,防君子不防小人。
解决方案:
按yi_iy说的干,把用户信息和投票信息加密到Cookie,让他伪造无门,投票的时候检查Cookie,为空99%都是有“目的”的。
解决方案:
我现在就想弄懂一个问题,我把Session设置过期时间并把SessionID存到cookie里了,关闭浏览器,Session并没失效,用户重新打开浏览器时判断cookie里的SessionID是否存在,我就想看看这判断的代码,有人能写给我看一下吗?
解决方案:
不要什么session,写个最后投票时间进去判断就可以了,写的数据加密。
解决方案:
引用11楼zhushijie123的回复:
Quote: 引用1楼wangjun8868的回复:
SessionId是唯一的,重新打开浏览时会生成新的SessionID关于做投票系统直接判断外网的IP就行!防止一个局域网无限刷票怎么获取外网IP和MAC地址?
只能获取客户端IP(Request.UserHostAddress)MAC获取不到(局域网可以获取MAC)
解决方案:
引用20楼wq1234wq的回复:
按yi_iy说的干,把用户信息和投票信息加密到Cookie,让他伪造无门,投票的时候检查Cookie,为空99%都是有“目的”的。我要是把cookie删了呢?下次打开浏览器一样可以继续投票
解决方案:
引用12楼zhushijie123的回复:
Quote: 引用10楼fei2yun的回复:
sessionID是不可能实现“一个用户一天只能投一次票”,相反cookie才是你的需要。任何轻易改变、获得的信息作为判断的,都是君子判断。session不可能,cookie一样可以改,怎么办?
cookie中只是保存一个随机分配的唯一key,例如值为l2lasf8d9fq9834jqkakfo32r2@#$!@#ksdjfa,这怎么改?Session集合也不是保存在什么浏览器端的,你不是还是能用么?那么稍微“自己动手”一点点,在cookie中保存一个唯一key就可以了,服务器端可以自己设计,例如使用“投票key、购物车key、.....key”去索引查询数据库记录。
解决方案:
纠结一切可能性,实际上是没有头的。比如你可能纠结用户有3台电脑(我家里就有2台pc、4台笔记本、5个android手机、一个苹果手机在可以同时上网投票),你也可能纠结程序员或许会租10台服务器,安装2000个轻量虚拟机,写一个应用模拟50000人来投票。纠结这些的结果,就是从业务出发。例如人家业务人员可能要求用户先登录(例如用微信扫码登录,避免流氓登录)然后再投票。这就是从业务思路触发,它假设程序员都是那种榆木脑袋的人。
解决方案:
纠结这些的结果,就是从业务出发。-->纠结这些的结果,就是从技术出发。单纯看技术,不算什么东西。
解决方案:解决方案:
引用24楼wangjun8868的回复:
Quote: 引用20楼wq1234wq的回复:
按yi_iy说的干,把用户信息和投票信息加密到Cookie,让他伪造无门,投票的时候检查Cookie,为空99%都是有“目的”的。我要是把cookie删了呢?下次打开浏览器一样可以继续投票
删掉的多数都是刷票的人,我可以确定的告诉你。现在上网的人有多少会用隐身模式浏览网页的或者专门针对你禁用cookie的,你直接提示他不能投票,需要打开Cookie。
解决方案:解决方案:
兄弟做投票啊,以前做过许多1、一般用cookie+session,可以挡住大部分不太懂计算机的人2、用IP控制不现实,Request.UserHostAddress是外网的IP,比如一个单位拉一条专线(一个固定IP),单位内部用一系列路由器分配到多个办公室,这个语句获得的是这个固定IP,而不是电脑中的实际IP;你限制了这个IP只投票一次,那么,整个单位有一人投过后,其他人都不行了3、记录MAC更不现实,客户端的js默认不允许访问本机信息,需要客户允许浏览器执行脚本,多数用户不会操作,同样,写个ActiveX嵌入到浏览器,又得需要用户允许下载它,并执行它……4、我还尝试过写个插件修改浏览器设置,但是,客户的浏览器改了后,怎么改回来?5、验证码也不管用6、还尝试过回答问题,成本太高,作罢如果要求严格,你可以考虑短信验证;或者用身份证验证,你得取得当地居民的身份证号,单向加密(MD5)后放到服务器,采用https方式,经过有关部门的同意,就可以实施
解决方案:
cookie+session方式,还有就是防止刷票软件,这是最头疼的,这些刷票软件的功能足够强大,我曾经监控过的。这种情况,需要统计投票密度了,例如1分钟内投进去1000票,就有问题了,需要你跟举办方协商,这个很重要,然后就采取一定措施时间: 2023-01-01