本帖最后由 defonds 于 2013-11-29 09:26:33 编辑

解决方案 »

  1.   

    登陆这块:
    1.登陆这块我想知道,成功登陆了之后会在Session域里面存放你的用户名和密码么???其他页面用session来判断是否已经登陆了?还是怎么的
    个人觉得 session存放用户名,访问权限等,一般不会存放密码,存了也没啥用。你访问的页面可能需要用户名或者验证访问权限,可以直接从session中取出再比较,但是页面中一般不会再需要验证密码了。
    2.登陆之后,要保存一段时间的话,是用cookie么??如果我这边登陆了我的账号,其他人电脑要登陆,怎么提示他已经登陆,是用application域来存放已经登陆的用户么?
    session是有默认时效的,一般30min,cookie也可以设置的。session在服务器端会自动保留设置时间的。关于如何验证,我也不太清楚,但个人觉得应该不是存在application中,因为application中存的资源有限,是比较宝贵的资源。
    3.如果这两个问题都是这样,那么如果Session域里自己弄一个用户名和密码进去,是否就可以伪造已经登陆???
    如果用application域来存放已经登陆的用户的话,那么用户如果不按“注销”按钮,直接关掉了浏览器的话,这个用户是不是还挂在application域里面??还是说需要有个什么东东来监听他是否已经“失去了连接”
    关掉浏览器是肯定还在application中的。
      

  2.   

    我帮你详细解答下,记得多给我点分。【登录】
    1. 你说的方式out了,现在一般权限过滤,都是根据你的路径来判断是否登录,
       用过写一个过滤器来,判断该路径是否合法,否则跳转到登录页面;
    2. 一般来说,一个帐号可以被多个人同时在多个地方登录。如果你要做到单一登录,
       即一个帐号同时,只能被一个用户登录,则需要做额外的判断,比如你可以记录
       该帐号当前登录ip,时间,次数等,也或者直接把登录后的帐号存在application对象中, 这样,下次再有人登录,就通过去application对象里面查找来判断是否当前有人登录3. session是服务器端控制,你单凭一个ie浏览器,是无法伪造登录的,另外application
       只要你服务器不停,就一直生效。【留言板】
    1. 你记录留言的时候,把当前时间记录下来,下次再记录第二条留言时候,将当前时间
       和上条留言时间比较,一分钟之内,则不让它留言,反之让他留言
    2. 管理员和普通用户留言,是没有区别的,那是权限控制的事了。你可以这样设计
       id,fromUser,toUesr,title,content,对应含义分别为,主键,来自谁的留言,给谁的留   言,标题,内容
      

  3.   

    楼主想的有点复杂吧...既然是初学者,同为初学者的我有不同的想法。
    1,做登陆,你要把用户信息放到application中你不觉得搞得有点大么?如果判断用户有没有在其他地方登陆你可以用一个标识位标识是否登陆
    2,session存放的信息可以有很大的作用但是也存在风险
    3,cookie的确可以保存你的登陆时间
    留言板:
      留言板的实现你可以参考一下某些贴吧的做法,自己模拟尝试着做
      

  4.   

    1.yes。2.可以设置session的有效时间。3.session是在服务器端控制,用户不可以随便的伪造。b/s不是很擅长做这个功能,可以把session的有效时间设置的短一些,在所有页面做个ajax,每隔一段时间访问服务器。
      

  5.   

    服务器会为每个登录用户保存session,相当于个hashmap,保存在内存中的,这个hashmap的key就是sessionId,当用户登录后,下次的每次请求都会在http头部加上这个sessionid,从而找到这个session。
      session中可以保存用户信息,或者自定义,看你的系统需要啥了。如果本地要保存cookie的话让用户下次自动登录,那肯定是要在cookie中保存用户名,用户密码了。
      至于实现已经登录,一般都是系统另外单独处理。比如用单例模式保存个用户的hashmap,key保存用户名,value保存用户登录状态,每次登录验证的时候去查找这个hashmap即可。
       对于留言板模块,我首先想到是在页面用js控制就可以实现1分钟后再能回复,但是考虑到页面关闭后再打开去回复,那应该只能在服务端处理了。那就在用户每次回复后保存当前系统时间到session中,下次回复时比对,如果小于1分钟,返回,反之,保存内容并更新session。
      这样应该差不多了吧。不用客气
      

  6.   


    这个会复杂么?这些不是做东西时候会碰到的问题么???对于你说的第一点,我觉得是欠妥当的!虽然说功能可以实现!
    第二点的话,楼上的大神已经说了...session没关系的,服务器那边控制着
      

  7.   


    这个想法不错...不知道做web的企业项目里是否也是这样干的!!
      

  8.   


    谢谢你的回复,感觉你的回答让我了解了一些
    但是可以详细回答你说的这个问题么1. 你说的方式out了,现在一般权限过滤,都是根据你的路径来判断是否登录
       用过写一个过滤器来,判断该路径是否合法,否则跳转到登录页面;
      

  9.   


    谢谢你的回复,感觉你的回答让我了解了一些
    但是可以详细回答你说的这个问题么1. 你说的方式out了,现在一般权限过滤,都是根据你的路径来判断是否登录
       用过写一个过滤器来,判断该路径是否合法,否则跳转到登录页面;看看这个http://blog.csdn.net/shadowsick/article/details/8572467
    还有这个spring security3 自定义权限管理 http://blog.csdn.net/shadowsick/article/details/8575062
      

  10.   


    谢谢你的回复,感觉你的回答让我了解了一些
    但是可以详细回答你说的这个问题么1. 你说的方式out了,现在一般权限过滤,都是根据你的路径来判断是否登录
       用过写一个过滤器来,判断该路径是否合法,否则跳转到登录页面;百度上搜“登录过滤器”
      

  11.   


    谢谢你的回复,感觉你的回答让我了解了一些
    但是可以详细回答你说的这个问题么1. 你说的方式out了,现在一般权限过滤,都是根据你的路径来判断是否登录
       用过写一个过滤器来,判断该路径是否合法,否则跳转到登录页面;看看这个http://blog.csdn.net/shadowsick/article/details/8572467
    还有这个spring security3 自定义权限管理 http://blog.csdn.net/shadowsick/article/details/8575062谢了!!!明白了~~~
      

  12.   

    .net里面有一种叫做票证。form验证,通过票证。
    如果是java的话,那就用session保存登录后的用户的信息,
    你要知道session的级别,就是在关掉浏览器,这个session就不存在了。
    也可以设置session的过期时间。
    2.登陆之后,要保存一段时间的话,是用cookie么??如果我这边登陆了我的账号,其他人电脑要登陆,怎么提示他已经登陆,是用application域来存放已经登陆的用户么?保持登录状态确实是需要cookies。
    关于其他人电脑要登录,怎么提示已经登录
    事实上,很多网站,包括一些业务系统都没有这个限制的。
    当然了,也有。目前最好的办法就是发心跳包,如果服务器有接受到当前用户发送的心跳包,那么,当前用户是在线的,别的电脑不能登录;
    如果服务器长时间没有收到心跳包,那么就可以判定这个用户已经离线。
    留言的话,表设计简单、大致可以这样:--主题
    CREATE TABLE [dbo].[Topic](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [topic] [nvarchar](200) NOT NULL,
    [content] [text] NOT NULL,
     CONSTRAINT [PK_Topic] PRIMARY KEY CLUSTERED 
    (
    [id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]--回复
    CREATE TABLE [dbo].[Comment](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [type] [int] NULL,
    [parentid] [int] NOT NULL,
    [commentuser] [nvarchar](50) NOT NULL,
    [commenttext] [text] NOT NULL,
    [commentreply] [text] NULL,
    [commentdate] [datetime] NOT NULL,
    [commentip] [nvarchar](20) NOT NULL,
     CONSTRAINT [PK_Comment] PRIMARY KEY CLUSTERED 
    (
    [id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
      

  13.   

    http://tieba.baidu.com/p/2736093577
      

  14.   

    以前做过web项目,但在学校里的,出来后就做软件开发了,很多东西都忘了。
    但看到楼主的问题,感觉你应该先搞清楚概念,session是保存在服务器端,如果你明白了这点,就不会问能不能问伪造?
    如何判断登陆页面,向楼上说的,用路径吧,因为即使登陆成功后,后因为某种原因删除了cookie或是重新注册后,其他的页面cookie应该是即使更新的,而不是说还要重新跳转到首页去登陆。
    application确实是大材小用了
    留言板有点像投票系统,新闻系统,一定时间内,不允许用户不停的投票和顶的,最好的办法好像不是用时间比较来做的,具体的,呵呵有点忘了。
      

  15.   


    这个想法不错...不知道做web的企业项目里是否也是这样干的!!
    至少我在公司就是这么实现的
      

  16.   


    谢谢,感觉说得不错!你在第一点里面说的 验证访问权限的话 是怎么回事?可以详细说说么
    比如一个超级管理员,一个普通用户,比如超级管理员能够访问系统设置这个栏目,而普通用户不能访问这个这个栏目。但是超级管理员在系统设置操作时是访问到了对应的系统设置栏目的url地址的。普通用户是没有权限进行系统设置的,所以他不能访问这个页面,但是如果普通用户知道对应的系统设置的url地址,那么他直接在浏览器中输入这个地址,是不是就可以进去了?但实际上他是没有权限的,所以出现这种情况时需要进行权限拦截。我当时做的时候是把对应用户能访问url存到session中的,但是这未必是一个号方法。
      

  17.   

    看了一下,楼上所说的一般只适合企业应用,互联网应用很少会把登录信息直接放在 session 里面的。