关于网站注册程序的一个设计问题,郁闷了好久了,请热心人给个答案!

马鸣风萧萧 2007-12-17 04:23:39
这几天重构公司网站的注册程序。但一个设计问题难为了好几天,到现在仍然没有答案。


比如有6个子页面,填完一个页面就点“下一步”,然后到下一个页面。。。这个过程中只有最后一步才将数据插入数据库中

。那么在前几步中,用户的中间数据应该保存到哪呢?原来的注册程序我看了,是保存到session里的,并在开始的时候设

置了一个session的有效期。至最后一步将session中的数据取出插入数据库中。。。这个方法不知道好不好,但我觉得挺

简单。但有人说这种方式不好。可能会占用过多的服务器内存?而且是不是一个用户并没有注册,将其信息放到session中

,这样不符合常规的设计?或者这种方式容易导致程序不稳定?。。。

我想了另外一种方式,是把每一步的信息都放到request里面,中间的每个servlet(action)处理后dispatch到下一个页面

,下一个页面的hidden域保存上一个页面的信息,如此类推,但如果注册的分步一多,每一步都要逐级保存更多的信息,

比如6步,那岂不是很麻烦。。。?

请问高手哪种方案更好,还有没有其他更好的办法?
...全文
252 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
马鸣风萧萧 2008-02-02
  • 打赏
  • 举报
回复
谢谢大家!
不过俺最后采用的还是放到request里。
放到request里面尽管会造成每个页面都加上一些隐藏字段,但后台采用了struts2.0的model driven 模式,所以不用每个action都定义一大堆属性。还好呵呵。不过有人说不够安全,这个我也正在考虑。。。
请问一下大家能详细讲讲这种方式的不安全之处嘛。。。
karlpan01 2008-01-10
  • 打赏
  • 举报
回复
完善老紫竹
1 放在session 里面,编程容易,安全性也好控制,毕竟每一步保存进session的都是验证过的,且现在最便宜的就是内存,可能会占用过多的服务器内存?(你的网站一分钟会注册多少人啊?再牛鼻的网站也不可能因为注册而耗尽内存,更何况你的注册信息其实是非常之小的)
2 放在cookie里面,可以节省有限的内存,因为cookie有存储限制的。 (这个方法有待考虑,不是不可行,经过写cookie这一步,写session比写cookie快多了,而且cookie的大小限制,更何况也没几个人这样用,最多用来存用户名和口令)
3 放在request里面?(你每一个页面都要从当前页面中将所有数据取出来,经过action处理后,传到下一个页面中,再取出,再传,累不累?)

再者如果用户不完成注册就结束,你可以将session的时间设小,10分钟足够注册完了,你的网站10分钟,不会有10000人注册吧?那你担心什么!

4 div隐藏,也是不错的想法
<div id="div1" style="display:block"><input ...></div>
<div id="div2" style="display:none"><input ...></div>
不过页面要非常复杂和非常大了!
dgqbcht 2008-01-10
  • 打赏
  • 举报
回复
用javascript,点击下一步,不刷新页面,就把刚填过的信息隐藏,在把新需要填写的信息显示。
liujietoer 2008-01-10
  • 打赏
  • 举报
回复
div的方法不错哦
100度泡腾 2008-01-10
  • 打赏
  • 举报
回复
session 和DIV(7楼)的办法都可以!
afterRain 2008-01-10
  • 打赏
  • 举报
回复
有一个更牛的想法,把这些注册页面写进一个jsp,只是用不同的div来显示,点击下一步只是隐藏相应的div,这样的话岂不是都不用存了?
老紫竹 2007-12-19
  • 打赏
  • 举报
回复
1 放在session 里面,编程容易,安全性也好控制,毕竟每一步保存进session的都是验证过的
2 放在cookie里面,可以节省有限的内存,因为cookie有存储限制的。
3 放在request里面?没想过,呵呵,累人又不安全

cookie和request页面都是可以伪造的,所以还是服务器端保存验证后的结果比较稳妥。

建议,保存session里面,而且以整体对象形式保存,不要每个注册数据单独保存。
<%
User userNew = (User)session.getAttribute("userNew");
if(userNew==null){
// 返回注册的第一页
// 或者
userNew = new userNew();
session.setAttribute("userNew",userNew);
}
...
%>
马鸣风萧萧 2007-12-18
  • 打赏
  • 举报
回复
为什么总感觉session 不稳定呢,容易丢失吧?!
而且session 不容易实现负载均衡吧?

3楼的做法难道是将临时信息写到ehcache中?
胡矣 2007-12-18
  • 打赏
  • 举报
回复
很想请教一下LS的具体是如何实现?
如果是我开发的话,我就保存在session中,
写数据库之后,清理掉session.一点愚见.
namelijian 2007-12-18
  • 打赏
  • 举报
回复
把所有数据 写到一个 MAP 然后把MAP 存入CACHE 感觉不错
xls024 2007-12-18
  • 打赏
  • 举报
回复
写一个cookie到注册人的临时文件夹里,每当点击下一步时在cookies里追加信息,当点击提交时,读取cookies内容并保存到数据库,同时删除cookies文件 只是一种方法 仅供参考
代码转载自:https://pan.quark.cn/s/11d565366452 【USB转I2C/IIC适配器上位机应用程序】是一种针对I2C(Inter-Integrated Circuit)通信协议而构建的工具,其通过USB端口将个人计算机转变为能够与I2C设备进行交互的控制器。该适配器使开发人员与工程师能够便捷地对遵循I2C协议的芯片执行读取和写入任务,因此在硬件构建和测试阶段能够显著提升效率,对于核实I2C接口芯片的工作性能具有特别的价值。 I2C协议是由飞利浦(现NXP半导体)于1980年代初创立的一种双线式串行总线,其目的是用于连接微控制器及其他外围设备。该协议仅需两条信号线(SDA - 数据线,SCL - 时钟线)即可完成多设备间的通信,大幅度削减了电路板上的布线需求,从而降低了生产成本。I2C协议提供多种速度等级,涵盖标准模式(100kbps)、快速模式(400kbps)以及高速模式(3.4Mbps),旨在满足不同场景下的应用要求。 Ginkgo USB转I2C适配器是这项技术的具体应用实例,它提供了一个物理接口,用于将USB端口转换为I2C端口。适配器内部装配有一个微控制器单元,该单元负责处理从USB到I2C的信号转换,并且通过USB线路向计算机传输信息,同时接收来自计算机的指令以操控I2C总线。这种设计使用户无需具备深厚的硬件知识,仅需借助上位机软件即可实现对I2C设备的操控。 Ginkgo I2C Adapter Classic是与该适配器相配套的软件,通常包含以下几项核心功能: 1. 设备识别:自动检测并建立与USB转I2C适配器的连接。 2. 总线探查:扫描I2C总线上所连接的设备地址,有助于准确定位设备的位置。 3. 读写指令...
代码转载自:https://pan.quark.cn/s/4c053f9292d9 在Android应用程序设计与实现过程中,有时需要借助C或C++语言所具备的高性能特点,此时就必须借助Android Studio的NDK(Native Development Kit)工具来对C/C++代码进行编译,进而生成SO(Shared Object)动态链接库文件。本篇文章将详尽阐述在Android Studio环境下如何执行这一流程。 我们首先需要掌握Android Studio项目的基本组织架构。在Android Studio的`app`文件夹内,存在一个名为`src`的子文件夹,该文件夹通常包含了`main`以及其他相关源代码目录。在`main`文件夹中,除了我们常见的`java`文件夹外,还设立了一个`jniLibs`文件夹,此文件夹专门用于存储SO文件。除此之外,还有一个`jni`文件夹,它是用来存放C/C++源代码的地方。 为了实现C/C++代码的编写与编译,我们必须在`build.gradle`文件中配置NDK的支持。打开`app/build.gradle`文件,在`defaultConfig`部分中嵌入以下内容: ```groovy externalNativeBuild { ndkBuild { path src/main/jni/Android.mk } } ``` 这段内容明确指示Android Studio去何处寻找`Android.mk`文件,该文件是一种Makefile的变体,主要用于设定编译规则和编译目标。 接下来,我们需要创建`Android.mk`文件。在这个文件中,我们将明确指定源代码文件、编译选项以及要生成的库名称。一个基础的...

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧