200分求一段程序!
现有一页面,上布置一按钮,要求点击该按钮时,如果服务器时间小于12:00,则弹出一提示窗口,提示:“你确定提交吗?”,点“是”,执行提交过程,点“否”,则什么都不做;如果服务器时间大于12:00,则不弹提示窗口,直接执行提交过程。 问题点数:200、回复次数:69Top
1 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-02 20:21:42 得分 5
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
//
Button1.Attributes.Add ("onclick",
"return confirm (\"确定要跳转吗?\") ;");
if (System.DateTime.Now.Hour>12)
{
Button1.Attributes.Clear ();
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
//条转
}Top
2 楼LaoDai_Net(『老代』)回复于 2005-06-02 20:23:47 得分 5
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
int iHour = Int32.Parse(DateTime.Now.Hour.ToString());
if(iHour < 12)
{
Button1.Attributes.Add("OnClick","return confirm (\"提示文字?\") ;");
}
}
Top
3 楼iuhxq(小灰)回复于 2005-06-02 21:04:50 得分 5
楼上的都可以呀
那我接点分吧。呵呵Top
4 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-02 21:05:38 得分 5
客户端无法直接得知得知服务端的时间.
说说为什么要这样做?
Top
5 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-06-02 21:11:37 得分 5
楼上的用的是服务端时间来判断啊。没错啊。?
这个可行啊Top
6 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-02 21:20:27 得分 0
楼上的方法,不能用的.
楼主要的是:如果时间xx,那么弹出对话框进行选择,但楼上的回答是,在显示的时候,判断时间,如果我打开页面,过10分钟再点击呢?
此时已经过了12点了,但执行的还是12点之前的判断.Top
7 楼lxfxw(feng)回复于 2005-06-02 21:22:28 得分 5
菜鸟,
不懂,
帮顶Top
8 楼lxfxw(feng)回复于 2005-06-02 21:22:38 得分 5
顶Top
9 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-06-02 21:28:59 得分 5
恩,没看清楚,不好意思。
那这样就没有直接方法了。
但是还是有解决方法的。感觉麻烦一些Top
10 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-02 21:31:32 得分 20
不过还是有办法的,借助XMLHTTP,在客户端求取服务端的时间,如下:
<input type=submit value=button1 name=button1 onclick="return(f());">
<script language=javascript>
{
var mybol = XmlPost();
if(mybol == 1)
{
//超过12点
return(true);
}
ele
{
return(confirm("确定提交吗?"));
}
}
//以XML求取数据
//webFileUrl:要读取的页面地址,可带参数
function XmlPost()
{
var webFileUrl = "xxx.aspx";
var result = "";
var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlHttp.open("POST", webFileUrl, false);
xmlHttp.send("");
result = xmlHttp.responseText;
return(result);
}
在另外一个页面xxx.aspx中取时间:
int aa = DateTime.Now.Hour;
string bb = ";
if(aa > 12)
bb = 1;
else
bb = 0;
this.Response.Write(bb);
this.Response.End();Top
11 楼joeweng(蓝天天蓝)回复于 2005-06-02 21:33:46 得分 5
接分Top
12 楼flyye_cs(一叶孤舟)回复于 2005-06-02 21:38:18 得分 5
study...Top
13 楼Truly()回复于 2005-06-02 21:56:47 得分 5
http://community.csdn.net/Expert/topic/4049/4049491.xml?temp=.5106928
原理类似,pageload时初始话时间信息倒计时到12点时
setTimeout("document.all.button1.onclick='return false'", 时间)Top
14 楼Truly()回复于 2005-06-02 21:58:54 得分 5
setTimeout("document.all.button1.onclick='return false'", 剩余时间)Top
15 楼y7967(三千)回复于 2005-06-02 22:00:04 得分 5
upTop
16 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-02 22:08:53 得分 15
还有一个办法,是hackate(兰花开香入梦境,独思佳人亦飘然!!) 提出的设想,加以改进,如下:
具体思路是:在页面加载时,取服务器时间至客户端,然后用setTimeout对此时间加以计时,按钮提交时,判断此时间是否超过12点.
假设当前页面是a.asp,可在页面放一个textbox1,在页面的page_load里面将当前时间写下
this.TextBox1.Text = DateTime.Now.ToString("yyyy-MM-dd hh-mm-dd");
<input type=submit value=button1 name=button1 onclick="return(f())">
然后在页面中写脚本
<SCRIPT LANGUAGE="vbScript">
<!--
dim stime
stime = document.all("TextBox1").value
function aa()
'刷新一次累加一分钟
stime = dateadd("n",1,stime)
call settimeout("aa()",1000*60)
end function
function f()
dim mybol
if hour(stime) >12 then
f = true
else
f = confirm("确认提交吗?")
end if
end function
//-->
</SCRIPT>
Top
17 楼nbaxccnd( 百思必得)回复于 2005-06-02 22:11:33 得分 5
upTop
18 楼gaofeng2000(高老师)回复于 2005-06-02 22:13:45 得分 0
考勤系统,就是想在下班时如果时间未到,给点提示信息……
呵呵……Top
19 楼dsclub(任搏软)回复于 2005-06-02 22:19:08 得分 5
ASP下就用XMLHTTP来做,无刷新,多爽!
ASP.NET,调用个WebService不行么?Top
20 楼wangjuping(三皮子[www.3pz.com])回复于 2005-06-02 22:20:07 得分 5
用不差这么麻烦吧!!!
不过我喜欢看hchxxzx(NET?摸到一点门槛) 发的贴子!!!Top
21 楼Truly()回复于 2005-06-02 22:22:28 得分 5
private void Page_Load(object sender, System.EventArgs e)
{
if(时间已过)
{// 这里自己写
}
else
script = "<script>setTimeout(\"document.all.button1.onclick='return false'\", " + ((TimeSpan)(DateTime.Today + TimeSpan.FromHours(12)- DateTime.Now)).TotalSeconds * 1000 + ");</script>";
Page.RegisterStartupScript("",script);
}
}Top
22 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-02 22:48:26 得分 5
对了,上面还要加一个调用
dim stime
stime = document.all("TextBox1").value
function aa()
'刷新一次累加一分钟
stime = dateadd("n",1,stime)
call settimeout("aa()",1000*60)
end function
call aa()Top
23 楼spfft007(自由鸟)回复于 2005-06-02 22:48:35 得分 5
markTop
24 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-03 07:05:20 得分 5
to hchxxzx(NET?摸到一点门槛)
在运行中客户端改了时间怎么办.....
Top
25 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-03 07:26:09 得分 5
用 webservice 实现的...
[WebMethod]
public int get_hour()
{
return System.DateTime.Now .Hour ;
}
调用页面
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Button2.Attributes.Add ("onclick",
"return get_time()");
}
<%@ Page language="c#" Codebehind="WebForm7.aspx.cs" AutoEventWireup="false" Inherits="WebService.WebForm7" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm7</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script>
var IntCall=0 ;
function Init()
{
Service.useService("Get_Hour.asmx?WSDL","Get_Hour");
}
function Service_Result()
{
temp.innerText=event.result.value;
window.alert ("Service_Result");
}
function get_time()
{
IntCall=Service.Get_Hour.callService("get_hour");
window.alert (" get_time");
if (Number(temp.innerText)>=12)
{
return true;
}
else
{
return(confirm("确定提交吗?"+temp.innerText));
}
}
</script>
</HEAD>
<body onload="Init()" MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<div id="Service" style="BEHAVIOR: url(webservice.htc)" onresult="Service_Result()"></div>
<FONT face="宋体"><span id="temp"></span>
<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 304px; POSITION: absolute; TOP: 184px" runat="server"
Text="Button" Width="152px" Height="32px"></asp:Button></FONT></form>
</body>
</HTML>
Top
26 楼1zhk(古木)回复于 2005-06-03 07:27:22 得分 2
upTop
27 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-03 07:27:32 得分 0
在程序根目录中记得加上 webservice.htc
Top
28 楼gngnandgngn(仗义执言 )回复于 2005-06-03 08:00:02 得分 2
点击按纽的时候去访问服务器端的时钟啊,为什么不可以啊,似乎没必要这么复杂吧。就是把第一位的代码放到按纽事件里不就好了Top
29 楼yishan116(哈哈)回复于 2005-06-03 08:25:07 得分 2
up
都对了 我就不说了啊 接接分Top
30 楼liuqinglq(白菜)回复于 2005-06-03 09:00:44 得分 5
怎么都说的这么复杂,很简单的思想
提交的时候再到服务器取时间不行么?
至于用什么方法取服务器的时间,不是多的是吗?Top
31 楼zhangyu028(听天之音)回复于 2005-06-03 09:12:25 得分 2
做个标记,有点意思!Top
32 楼biao88482005(飚)回复于 2005-06-03 09:44:42 得分 2
同意 gngnandgngn(仗义执言)
狂顶~~~Top
33 楼brando_beat(Eの懒龙)回复于 2005-06-03 09:48:47 得分 2
markTop
34 楼ye_zi(行到水穷处·坐看云起时)回复于 2005-06-03 10:03:53 得分 2
太晚了,只接分Top
35 楼blackhero(黑侠客)回复于 2005-06-03 10:04:39 得分 2
估计差不多了
我只能接分了Top
36 楼xu770(我爱鱼儿)回复于 2005-06-03 10:33:31 得分 2
直接到服务器端判断不就行了吗?
楼主又没有说一定要在客户端判断。Top
37 楼wangxinghai(我本轻狂)回复于 2005-06-03 10:49:44 得分 2
学习Top
38 楼luckyprg(lucky)回复于 2005-06-03 10:57:03 得分 2
MarkTop
39 楼bandt(逝者如斯)回复于 2005-06-03 11:25:20 得分 2
MarkTop
40 楼WYZSC(007,重在参乎,说错问错勿怪。)回复于 2005-06-03 11:40:05 得分 2
study...Top
41 楼Truly()回复于 2005-06-03 13:08:17 得分 0
回复人: boytomato(深爱一人叫颖的女孩!) ( ) 信誉:100 2005-06-03 07:05:00 得分: 0
to hchxxzx(NET?摸到一点门槛)
在运行中客户端改了时间怎么办.....
---------------------------------------
上面所有的代码只要不是通过提交后判断,
无论你是用webservice或是直接生成脚本
只要是在客户端实现无刷新判断的均可以修改客户端代码骗过服务器,
客户端的判断只是方便用户而不能解决安全问题
唯一可作的是同时服务器验证Top
42 楼Truly()回复于 2005-06-03 13:11:28 得分 0
同时提醒诸位的是使用htc的也就限定了ie类浏览器Top
43 楼zeusvenus()回复于 2005-06-03 13:31:11 得分 2
最上面两位提的办法我觉得已经解决问题了,实在不行就来个页面定时刷新就行了.只要服务器的时间没设错不会出问题的.Top
44 楼Ordin(郁闷呀)回复于 2005-06-03 13:34:26 得分 2
markTop
45 楼aliketen(继续学习NET!)回复于 2005-06-03 13:39:09 得分 2
upTop
46 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-03 13:46:32 得分 0
to Truly(NULL)
我上面写的东西,都是跟服务器端有关的.无论你在客户端如何欺骗,它最后总是到服务端去取时间,根本不可能被骗过去Top
47 楼soft_biao(巴不豆)回复于 2005-06-03 13:49:12 得分 2
本人菜鸟一个,想问个问题
为什么不能直接在Button1_Click()函数中取时间,然后再对其进行判断呢?
这样取的时间是在触发click事件时取的,应该是服务器当前的时间吧Top
48 楼mfc6027(直下九天)回复于 2005-06-03 13:50:55 得分 2
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
int iHour = Int32.Parse(DateTime.Now.Hour.ToString());
if(iHour < 12)
{
Button1.Attributes.Add("OnClick","return confirm (\"提示文字?\") ;");
}
}
*********************************************************************
錯的,不能用Top
49 楼Truly()回复于 2005-06-03 14:03:36 得分 0
to Truly(NULL)
我上面写的东西,都是跟服务器端有关的.无论你在客户端如何欺骗,它最后总是到服务端去取时间,根本不可能被骗过去
-------------------------------
好,我告诉你怎么改,你把页面保存为html,修改
<input type=submit value=button1 name=button1 onclick="return(f());">
为
<input type=submit value=button1 name=button1>
form中的action修改为正确的url,然后打开修改后的html点击inputTop
50 楼soft_biao(巴不豆)回复于 2005-06-03 14:14:59 得分 2
如果是用javascript写的并且没有runat=server属性的话应该是可以欺骗的,如果
有runat=server属性或者是在.cs文件中写代码的话,程序是在服务器端运行的,应该不会
出现欺骗吧
还有就是我上面的问题:
为什么不能直接在Button1_Click()函数中取时间,然后再对其进行判断呢?
这样取的时间是在触发click事件时取的,应该是服务器当前的时间吧
Top
51 楼qb613ps3(孤星)回复于 2005-06-03 14:24:22 得分 2
UPTop
52 楼xyly624(反之亦然)回复于 2005-06-03 14:28:41 得分 2
不错。
MARK.Top
53 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-03 14:40:13 得分 0
to Truly(NULL)
你看看我写的那个有没有漏洞......
Top
54 楼Truly()回复于 2005-06-03 14:57:06 得分 0
to boytomato and soft_biao
其实无论使用什么技术jsp or php or asp or asp.net
到了客户端都变成了html和script,
像runat=server只不过是一些服务器标记
在Button1_Click()中是最安全的方法
但是楼主花200份自然不是要大家回答到Button1_Click()中判断的代码
对于boytomato的代码跟hchxxzx的区别是onclick属性的生成方法
你的代码到了客户段就是
<input type=button onclick="return get_time()"...
同样可以修改并post到客户端Top
55 楼Truly()回复于 2005-06-03 14:57:47 得分 0
post到服务器Top
56 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-03 15:09:19 得分 0
<input type=submit value=button1 name=button1 onclick="return(f());">
为
<input type=submit value=button1 name=button1>
form中的action修改为正确的url,然后打开修改后的html点击input
------------
这样说,就是绕过此页面,自己修改再提交喽.
但这样并不能说上述的脚本写得有问题.
并且,如果我在服务端再加一个判断,判断提交的页面是否由本网站进来的,这种提交方式就不灵了.
就好像,我们写程序,有人说有很多漏洞,但有些时候,是代码的问题,而有些时候,却是服务器配置的问题.作为代码人员,只要用心写好自己的代码,尽量少漏洞,至于服务器,并不是我们所能关心的.
而且,在ASP.NET中,再象ASP中自己修改页面然后提交,不知道还行不行.Top
57 楼qingbo_hu(湖儿清清水)回复于 2005-06-03 15:13:06 得分 2
学习,不要分,呵呵呵
Top
58 楼renyu732(Sysinfo)回复于 2005-06-03 15:19:02 得分 2
帮你UPTop
59 楼Truly()回复于 2005-06-03 15:22:32 得分 0
唯一想说的就是本人从未进行真正进行过asp开发及学习,至于 "ASP.NET中,再象ASP中自己修改页面然后提交,不知道还行不行"
而input和submit表单,action等都是html元素,勿须asp/asp.netTop
60 楼dongpo1(dongpo1)回复于 2005-06-03 15:55:42 得分 2
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(DateTime.Now.Hour<18)
Button1.Attributes.Add("onclick","Javascript:return confirm('你确定提交吗?')");
}Top
61 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-03 20:48:41 得分 0
本人特郑重声明一下
对于上述问题的争论,仅是技术之争,纯粹就事论事,并无其它想法.
各位无须担心其它问题.Top
62 楼lau_marco(青苹果)回复于 2005-06-04 03:14:26 得分 2
收藏Top
63 楼hotphen(侯风)回复于 2005-06-04 04:20:55 得分 1
不错,有意思.Top
64 楼yc3231996(阿蒙)回复于 2005-06-04 05:39:16 得分 1
顺便问一个问题:
但button_click()被触发,应该不会马上就执行里面的代码吧,页面要重载,
因此page_load()是在button_click()前发生。。。
那我在page_load()里取服务器时间判断,
if 某个条件 then
Button1.Attributes.Add ("onclick","return confirm (\"确定要跳转吗?\")")
end if
当page_load()执行完了再执行button_click()里面的
不知道我的思路错在哪,我测试了下,结果不正确。
Top
65 楼huangyiping1()回复于 2005-06-04 06:33:28 得分 1
怎么在这个社区里新建贴子呢?Top
66 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-06-04 08:00:46 得分 0
呵呵。其实嘛。这个东西挺难说的!
关键在于程序员了。看他负责不负责了。一个不负责的程序员。。。
呵呵。这个问题出得挺不错的。Top
67 楼renyu732(Sysinfo)回复于 2005-06-04 09:39:30 得分 1
upTop
68 楼gaofeng2000(高老师)回复于 2005-06-04 16:16:09 得分 0
多谢大家的帮助!经过权衡,采用了hchxxzx(NET?摸到一点门槛)提供的利用xmlhttp的方法。
他的代码基本没问题,只是这句不太准确
int aa = DateTime.Now.Hour;
string bb = ";
if(aa > 12)
---------------------------
if(DateTime.Now.TimeOfDay >= TimeSpan.FromMinutes(720))
Top
69 楼teacher1998(英语+asp.net+MsSQL)回复于 2005-06-04 16:26:39 得分 1
路过!希望搂主早点解决困惑!
Top




