protected void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string RandomStrings = GetValidateStr(5); // 获取指定个数个字符验证码
Session["RandomString"]=RandomStrings;// 存放验证码字符串
this.DrawString(RandomStrings); // “画出”字符串
string str=Convert.ToString (Session["RandomString"]);
}+ this {ASP.yanzheng_aspx} QJDC.chkNum
+ sender {ASP.yanzheng_aspx} System.Object
+ e {System.EventArgs} System.EventArgs
RandomStrings "4W1DS" string
str null string
这是什么原因``str怎么会是null
我做的是验证码的验证``现在连值都传不出去``请哪位大哥帮帮忙``困扰几天了
{
// 在此处放置用户代码以初始化页面
string RandomStrings = GetValidateStr(5); // 获取指定个数个字符验证码
Session["RandomString"]=RandomStrings;// 存放验证码字符串
this.DrawString(RandomStrings); // “画出”字符串
string str=Convert.ToString (Session["RandomString"]);
}+ this {ASP.yanzheng_aspx} QJDC.chkNum
+ sender {ASP.yanzheng_aspx} System.Object
+ e {System.EventArgs} System.EventArgs
RandomStrings "4W1DS" string
str null string
这是什么原因``str怎么会是null
我做的是验证码的验证``现在连值都传不出去``请哪位大哥帮帮忙``困扰几天了
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>yanzheng</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="yanzheng" method="post" runat="server">
<FONT face="宋体"></FONT>
</form>
</body>
</HTML>
是在这个里面写就可以了吗?``其它地方不要写了```
session模式是 InProc
1.你随便创建一个字符串,然后保存到session中试试,如果能读出这个字符串,那么说明你的web.config和环境设置都没问题,最有可能的问题是你的代码有问题;如果也不能读出这个字符串,那么应该检查你的web.config和环境设置
2.从session读取对象的代码最好这样写,一个可以提高性能,还有一个可以确保类型转换是安全的
string str = Session["RandomString"] as string
if(str!=null)
{
//对读取的字符串进行操作
}我等着接你的200分,呵呵
如果你新開一個網站,web.config什麼都沒改動的話,這個問題應該不會出現,可能你代碼有問題了,比如哪裡不小心寫了一個session.clear();
<configuration>
<system.web> <!-- 动态调试编译
设置 compilation debug="true" 以启用 ASPX 调试。否则,将此值设置为
false 将提高此应用程序的运行时性能。
设置 compilation debug="true" 以将调试符号(.pdb 信息)
插入到编译页中。因为这将创建执行起来
较慢的大文件,所以应该只在调试时将此值设置为 true,而在所有其他时候都设置为
false。有关更多信息,请参考有关
调试 ASP.NET 文件的文档。
-->
<compilation
defaultLanguage="c#"
debug="true"
/> <!-- 自定义错误信息
设置 customErrors mode="On" 或 "RemoteOnly" 以启用自定义错误信息,或设置为 "Off" 以禁用自定义错误信息。
为每个要处理的错误添加 <error> 标记。 "On" 始终显示自定义(友好的)信息。
"Off" 始终显示详细的 ASP.NET 错误信息。
"RemoteOnly" 只对不在本地 Web 服务器上运行的
用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便
不向远程客户端显示应用程序的详细信息。
-->
<customErrors
mode="RemoteOnly"
/> <!-- 身份验证
此节设置应用程序的身份验证策略。可能的模式是 "Windows"、
"Forms"、 "Passport" 和 "None" "None" 不执行身份验证。
"Windows" IIS 根据应用程序的设置执行身份验证
(基本、简要或集成 Windows)。在 IIS 中必须禁用匿名访问。
"Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),然后
在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。
"Passport" 身份验证是通过 Microsoft 的集中身份验证服务执行的,
它为成员站点提供单独登录和核心配置文件服务。
-->
<authentication mode="Windows" /> <!-- 授权
此节设置应用程序的授权策略。可以允许或拒绝不同的用户或角色访问
应用程序资源。通配符: "*" 表示任何人,"?" 表示匿名
(未经身份验证的)用户。
--> <authorization>
<allow users="?" /> <!-- 允许所有用户 -->
<!-- <allow users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
<deny users="[逗号分隔的用户列表]"
roles="[逗号分隔的角色列表]"/>
-->
</authorization> <!-- 应用程序级别跟踪记录
应用程序级别跟踪为应用程序中的每一页启用跟踪日志输出。
设置 trace enabled="true" 可以启用应用程序跟踪记录。如果 pageOutput="true",则
在每一页的底部显示跟踪信息。否则,可以通过浏览 Web 应用程序
根目录中的 "trace.axd" 页来查看
应用程序跟踪日志。
-->
<trace
enabled="false"
requestLimit="10"
pageOutput="false"
traceMode="SortByTime"
localOnly="true"
/> <!-- 会话状态设置
默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
若要禁用 Cookie,请设置 sessionState cookieless="true"。
-->
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/> <!-- 全球化
此节设置应用程序的全球化设置。
-->
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
/>
</system.web></configuration>
------------------------------yanzheng.aspx<%@ Page language="c#" Codebehind="yanzheng.aspx.cs" AutoEventWireup="true" EnableSessionState="True" Inherits="QJDC.chkNum" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>yanzheng</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="yanzheng" method="post" runat="server">
<FONT face="宋体"></FONT>
</form>
</body>
</HTML>
……………………………………………………
说明已经把问题定位缩小了一半,接着让我再来给你看看,呵呵
说得明白一点
可另一个页面yanzheng=Session["RandomString"] as string();
yanzheng 还是空值
可另一个页面yanzheng=Session["RandomString"] as string;
yanzheng 还是空值
{
// 在此处放置用户代码以初始化页面
string RandomStrings = GetValidateStr(5); // 获取指定个数个字符验证码
Session["RandomString"]=RandomStrings;// 存放验证码字符串
string str=Convert.ToString (Session["RandomString"]); this.DrawString(RandomStrings);// “画出”字符串
}
+ this {ASP.yanzheng_aspx} QJDC.chkNum
+ sender {ASP.yanzheng_aspx} System.Object
+ e {System.EventArgs} System.EventArgs
RandomStrings "cwoZE" string
str "cwoZE" string
可另一个页面yanzheng=Session["RandomString"] as string;
yanzheng 还是空值
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
1.你在保存session的页面读取这个session试试(也就是保存session后马上在同一个页面读取试试),看看能不能读到这个值
2.把另一个页面无法读取session的部分代码给我看一下
3.我开始怀疑你的web应用程序是否在频繁重启(每次重启session就会丢失),比如动态删除web文件夹下面的目录就会导致web程序重启;当然你检查一下你的iis是否在频繁重启。在线给你解决问题,呵呵
if(yanzheng!=null)
{
string verify=TextBox1.Value.Trim();
if(verify==yanzheng){}
}你在保存session的页面读取这个session试试(也就是保存session后马上在同一个页面读取试试),看看能不能读到这个值
这样算不算
string RandomStrings = GetValidateStr(5); // 获取指定个数个字符验证码
Session["RandomString"]=RandomStrings;// 存放验证码字符串
string str=Convert.ToString (Session["RandomString"]);
string yanzheng=Session["RandomString"] as string ;
这样有值
谢谢啊```
你再创建一个测试页面,看看在这个测试页面能不能取到值。还有你把不能取到值的页面的代码给我看看
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace forgetpassword
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlInputText TextBox1;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.HtmlControls.HtmlForm Form1;
protected System.Web.UI.HtmlControls.HtmlInputText u1;
protected System.Web.UI.HtmlControls.HtmlInputText pwd;
protected System.Web.UI.HtmlControls.HtmlInputText spwd;
protected System.Web.UI.HtmlControls.HtmlGenericControl P1;
protected System.Web.UI.HtmlControls.HtmlSelect select4;
protected System.Web.UI.HtmlControls.HtmlInputText ypwd;
protected System.Web.UI.HtmlControls.HtmlInputImage Submit;
protected void Page_Load(object sender, System.EventArgs e)
{
// string sTcp="tcp://locahost:9932/component";
// registerclient.registerclient rc = new registerclient.registerclient ();
// component.component sendserverinfo =new component.component();
// sendserverinfo = rc.getregisterclient(sTcp);
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Submit.ServerClick += new System.Web.UI.ImageClickEventHandler(this.Submit_ServerClick);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
protected void Submit_ServerClick(object sender, System.Web.UI.ImageClickEventArgs e)
{
component.component sendserverinfos = new component.component();
if(u1.Value==""||pwd.Value ==""||ypwd.Value ==""||spwd.Value ==""||select4.Value=="")
{
Response.Write("<script language='javascript'>alert('请认真填写!!!');</script>");
return;
}
else
{
bool r1=sendserverinfos.checkpwd(pwd.Value.Trim());
if(r1)
{
string yanzheng=Session["RandomString"] as string ;
if(yanzheng!=null)
{
string verify=TextBox1.Value.Trim();
if(verify==yanzheng)
{
bool rs=sendserverinfos.forgetpwd(u1.Value.Trim() ,select4.Value.Trim(),ypwd.Value.Trim());
if(!rs)
{
Response.Write("<script language='javascript'>alert('密码提示和用户不一至,密码修改失败!');</script>");
u1.Value="";
pwd.Value ="";
ypwd.Value ="";
spwd.Value ="";
return;
}
else
{
bool rc=sendserverinfos.repairpwd2(spwd.Value.Trim(),u1.Value.Trim() );
if(rc)
{
Response.Write("<script language='javascript'>alert('密码修改成功!请保管好您的密码!');</script>");
}
else
{
Response.Write("<script language='javascript'>alert('密码修改失败!!');</script>");
u1.Value="";
pwd.Value ="";
ypwd.Value ="";
spwd.Value ="";
return;
}
}
}
else
{
Response.Write("<script language='javascript'>alert('验证码错误!!');</script>");
pwd.Value ="";
ypwd.Value ="";
spwd.Value ="";
return;
}
}
else
{
Response.Write("<script language='javascript'>alert('session null!!');</script>");
return;
}
}
else
{
Response.Write("<script language='javascript'>alert('密码格式错误!!');</script>");
u1.Value="";
pwd.Value ="";
ypwd.Value ="";
spwd.Value ="";
return;
} }
}
}
}
把与获取session无关的一切代码先注释掉以后再试试
在新建的测试页面中不能取到?
不在同一目录下就没有值
string RandomStrings = GetValidateStr(5); // 获取指定个数个字符验证码
Session["RandomString"]=RandomStrings
获取了值并画出了字串,但在加载的时候,就又获取了一次,但这次是空的,所有Session["RandomString"]=就被替换为空了,可以这样解决。
用一个Viewstatel来记录第一次获取的值,或者设置页面判断是否页面回传,防止session被替换。
不在同一目录下就没有值
※※※※※※※※※※※※※※※
这个现象还真没见过。session是保存在服务器内存中的,对该web程序的所有目录下的所有页面都可以访问。3.你再往session中随便保存一个字符串常量试试,看看在同一个页面,同一个目录不同页面,不同目录不同页面中获取这个session试试
protected void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面 if (!IsPostBack) //加这句话试试
{
string RandomStrings = GetValidateStr(5); // 获取指定个数个字符验证码
Session["RandomString"]=RandomStrings;// 存放验证码字符串
this.DrawString(RandomStrings); // “画出”字符串
string str=Convert.ToString (Session["RandomString"]);
}
}
string RandomStrings = GetValidateStr(5); // 获取指定个数个字符验证码
Session["RandomString"]=RandomStrings
获取了值并画出了字串,但在加载的时候,就又获取了一次,但这次是空的,所有Session["RandomString"]=就被替换为空了,可以这样解决。
用一个Viewstatel来记录第一次获取的值,或者设置页面判断是否页面回传,防止session被替换。
问题又出现了```
虽然加载了两次``可Session["RandomString"]的值同时也被加载了
1.你往session中随便保存一个字符串常量(不是那个图片值)试试,看看在同一个页面,同一个目录不同页面,不同目录不同页面中获取这个session试试
2.确保程序中其他地方没有修改或者清空这个session值
3.确保你的web应用程序没有不间断重启(每次重启session就会丢失),你的iis没有不间断重启。
我都要和你一起崩溃了
注意:session名字要换一个新的。
?你们是怎么把验证码的值传到另一个页面的(djdyhduk) 20 32 4-26 12:01 管理
?验证码的错误(djdyhduk) 30 7 4-25 12:40 管理
?session怎么老是空值(djdyhduk) 20 13 4-25 10:09 管理
?为什么session总是空值啊(djdyhduk) 20 35 4-25 10:07 管理
?验证码怎么连图片都显示不出来了(djdyhduk) 我两个页面不在同一虚拟目录下
你到这个页面回复``我给分```
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
搞了快一天了总算你说出了原因:
1.一个虚拟目录对应一个web程序,sesson只能在同一个web程序之间的跨页面共享,而不能跨web程序啊。
2.如果你的数据需要跨web程序,那就保存到数据库好了,让不同的web程序共同访问这个数据库好了。我去接分了