要做到这一点,必须有一个更优雅的方式.
如何将所有非空的帖子数据转换为会话变量,而不是逐行指定每一个?基本上,我想对POST数组中存在的所有X实例执行以下函数.
if (!empty($_POST['X'])) $_SESSION['X']=$_POST['X'];
Run Code Online (Sandbox Code Playgroud)
我打算一个接一个地做,但后来我认为必须有一个更优雅的解决方案
如果这个问题已被提出,请原谅我.HttpContext.Current.Session["key"]返回一个对象,我们必须Type先将它强制转换为该对象才能使用它.我正在研究类型会话的各种实现
http://www.codeproject.com/KB/aspnet/typedsessionstate.aspx http://weblogs.asp.net/cstewart/archive/2008/01/09/strongly-typed-session-in-asp-net.aspx http://geekswithblogs.net/dlussier/archive/2007/12/24/117961.aspx
如果我们想要将一个新Type的对象添加到会话中,或者作为一个方法或一个单独的包装器,我觉得我们需要在SessionManager中添加一些代码(如果我错了,请更正).我以为我们可以使用泛型
public static class SessionManager<T> where T:class
{
public void SetSession(string key,object objToStore)
{
HttpContext.Current.Session[key] = objToStore;
}
public T GetSession(string key)
{
return HttpContext.Current.Session[key] as T;
}
}
Run Code Online (Sandbox Code Playgroud)
使用是否有任何固有的优势
SessionManager<ClassType>.GetSession("sessionString")
而不是使用
HttpContext.Current.Session["sessionString"] as ClassType
Run Code Online (Sandbox Code Playgroud)
SessionManager["sessionString"] = objToStoreInSession,但发现静态类不能有索引器.有没有其他方法来实现这一目标?
我的想法是创建一个SessionObject,它将存储Type和对象,然后使用密钥将此对象添加到Session(使用SessionManager).检索时,将所有对象强制转换为SessionObject,获取类型(比方说t)和对象(比如说obj)并转换obj为t并返回它.
public class SessionObject
{
public Type type {get;set;}
public Object obj{get;set;}
}
这不会起作用(因为返回签名将是相同的,但返回类型将是不同的).
是否有任何其他优雅的方式以更安全的方式在会话中保存/检索对象
我想以类似于CodeProject上讨论的方式包装Session变量.
public static class WebSession
{
private const string CurrentUserKey = "CurrentUser";
private static HttpSessionState Session
{
get { return HttpContext.Current.Session; }
}
public static bool Exists
{
get { return Session != null; }
}
public static User CurrentUser
{
get { return Session[CurrentUserKey] as User; }
set { Session[CurrentUserKey] = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题:如果我必须CurrentUser在同一页面中多次访问,是否可以通过将其分配给本地变量而不是访问包装属性来提高性能?或者HttpSessionState确保每个请求只对对象进行一次反序列化,以便在同一个http请求中的后续调用不再需要花费多少钱?
谢谢你,亚伦
我试图将两个变量传递给一个mysql查询,并在下面传递会话变量时遇到困难:
$check = mysql_query("SELECT *
FROM Clients
WHERE Username = '$new_username'
AND Username != '$_SESSION['Username']'") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)
有小费吗?提前致谢.
我使用CI的用户指南来创建会话表.
CREATE TABLE IF NOT EXISTS `sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(120) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id),
KEY `last_activity_idx` (`last_activity`)
);
Run Code Online (Sandbox Code Playgroud)
每当我$db['default']['stricton'] = TRUE在database.php中时,都会显示此错误
错误号码:1364
字段'user_data'没有默认值
INSERT INTO
sessions(session_id,ip_address,user_agent,last_activity)VALUES( '2b92823888c4c5eb4b5b2ae25282ce9e', '192.168.1.4', '的Mozilla/5.0(Windows NT的6.1; WOW64)为AppleWebKit/535.1(KHTML,例如Gecko)铬/ 14.0.835.186 Safari浏览器/ 535.1',1317346730 )文件名:libraries/Session.php
行号:327
但是,我想强制执行严格的SQL.
我想使用变量会话($ _session),但它在Drupal 7中不起作用.为了保存变量会话,Drupal 7有什么可能性.
如何从 中删除错误消息MessageBag?
我一直试图从消息数组中删除一个MessageBag没有任何运气的特定元素。
我两次收到相同的错误消息。
@if($errors->has('undefined'))
<div class="alert alert-warning">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Failure.</h4>
{{ $errors->first('undefined') }}
</div>
<?
// $messages = $errors->getMessages();
$messages = $errors->toArray();
unset($messages['undefined']);
?>
@endif
@if($errors->any())
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Error!</h4>
{{ $errors->first() }}
</div>
@endif
Run Code Online (Sandbox Code Playgroud)
我做过类似的事情,而且似乎有效。
<?
$messages = $errors->toArray();
?>
@if(array_key_exists('undefined', $messages))
<?
$message_array = $messages['undefined'];
$message = $message_array[0];
unset($messages['undefined']);
?>
<div class="alert alert-warning">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Failure.</h4>
{{ $message }}
</div>
@endif
<?
foreach ($messages …Run Code Online (Sandbox Code Playgroud) 我已经挣扎了好几个小时,但我无法让它发挥作用.当我重定向到另一个PHP页面时,我的所有会话变量都为null.我在xampp服务器上.
session.php文件
<?php
session_start();
if(isset($_POST['submitted']))
{
$_SESSION['first_name'] = "MAX";
var_dump($_SESSION);
header("Location: http://localhost:8080/secure login/session2.php");
die();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859- 1" />
<title>You Logged In</title>
</head>
<body>
<form action="session.php" method="post">
<div align="center"><input type="submit" name="submit" value="Login" /></div>
<input type="hidden" name="submitted" value="TRUE" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
session2.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>You …Run Code Online (Sandbox Code Playgroud) 我想尝试像这样的会议
@HttpContext.Session.GetString("some");
Run Code Online (Sandbox Code Playgroud)
但我得到了
*
非静态字段需要对象引用......
*
有想法的人吗?
我正在使用 5 个不同的网站,这些网站的会话寿命很短,它们会在不活动的 10 - 15 分钟内退出。我想出了浏览器扩展来帮我做这件事。以及我到目前为止所做的:
这些似乎有效,但用户体验非常糟糕。
此外,重新加载页面可能会导致我正在做的工作丢失。
我尝试在后台提出一些请求,但这些网站使用了大量标头和 cookie,这似乎很难弄清楚如何使用它们。
有没有更好的方法来停止由于不活动而注销,或者有正确的方法来确定我应该在我的请求中附加哪些标头和 cookie?
我真的不知道这些网站使用哪个堆栈,但似乎它们具有很高的安全标准。
javascript session-variables session-cookies google-chrome-extension