标签: session-variables

MVC 和程序状态 - 模型应该是愚蠢的吗?

我正在使用一个使用 MVC 范例的框架。它是 CodeIgniter,但我的问题并不是专门针对该框架 - 更普遍的是关于使用 MVC 时的最佳实践。

我使用 $_SESSION 变量来维护一些状态变量(用户选择、一些临时首选项、一些数据过滤选项)。这很容易做到,但我发现我在模型和控制器之间分割了这些变量的使用。有时我会更新控制器中的一个,并在模型中查找它。这开始“闻起来”很有趣,因为我突然想到让模型“意识到”所有这些设置可能不是一个好主意。模型不应该只接受获取/操作数据的请求,并且只关心请求中明确的内容(而不必查找外部变量)吗?

下面是一个示例: 我有一个名为 $_SESSION['regionFilter'] 的会话变量。这是在控制器中创建和更新的,代表用户想要“向下钻取”的销售区域。当控制器从模型请求一些数据时,我当前让模型查找 $_SESSION['regionFilter'] 变量,并在为数据库创建 SQL 时使用它。似乎让模型在程序状态方面变得“哑”,并且让控制器以某种方式将 $_SESSION['regionFilter'] 变量捆绑到其请求中(如果需要的话)可能更有意义。

有什么想法吗?谢谢!


编辑: 谢谢大家的讨论。我知道重叠的问题,但很难找到有关该主题的一般性讨论 - 我搜索“MVC 模型程序状态”时发现了许多有关 ASP.NET-MVC 特定讨论的问题,这些问题在实现中陷入困境细节。

我已将问题标记为已关闭。再次感谢您的想法!

php model-view-controller paradigms session-variables

1
推荐指数
1
解决办法
788
查看次数

为什么 PHP 会话在页面重新加载时被删除?

所以我遇到了这个问题,当我在页面上一段时间没有执行任何操作时,重新加载页面后$_SESSION就会被清除。我检查了代码,它没有任何unset()函数或任何其他可以清除$_SESSION变量的东西。有什么想法为什么会发生吗?

编辑:如果我想让会话一直持续到浏览器关闭,我该怎么办?我不明白它是gc检查会话是否过期session_start,但我无法在调用之前修改会话数据session_start,因此在调用后修改会话数据session_start无论如何都会导致会话过期?

session.cookie_lifetime默认设置为 0,session.gc_maxlifetime, session.gc_divisor,session.gc_probability也设置为其默认值。

php session-variables

1
推荐指数
1
解决办法
8496
查看次数

课堂上的 PHP 会话

<?
session_start();
class DB_MSSQL {
  protected $Host;
  protected $Database;
  protected $User;
  protected $Password;
  protected $Link_ID  = 0;
  protected $Query_ID = 0;
  protected $Record   = array();
  protected $Row      = 0;
  protected $Errno    = 0;
  protected $Error    = "";
  protected $Halt_On_Error = "yes";
  protected $Auto_Free = 1;     
  protected $PConnect  = 0;
    function _construct(){
   $this->Host = $_SESSION['SQLIP'];
     $this->Database = $_SESSION['SQLDB'];
     $this->User = $_SESSION['SQLUSER'];
     $this->Password = $_SESSION['SQLPASS'];
  }

  function DB_MSSQL($query = "") {
    if($query) {
      $this->query($query);
    }
  }
  function connect() {
    if ( 0 …
Run Code Online (Sandbox Code Playgroud)

html css php class session-variables

1
推荐指数
1
解决办法
6733
查看次数

如何检查会话变量是否已设置?

在检查我的详细信息页面中是否设置了会话变量时,我不断收到“自定义脚本模块中的错误”。即使没有设置会话变量,这个语句不是应该给我真或假而不是错误吗?

<cfif StructKeyExists(session.mysiteShibboleth, "isAuthenticated") and (session.mysiteShibboleth.isAuthenticated) >
    <cflog text="Session-Defined-5: isAuthenticated" type="Information" file="Authentication">
<cfelse>
    <cflog text="Session-Defined-7: It's not authenticated'" type="Information" file="Authentication">
</cfif>
Run Code Online (Sandbox Code Playgroud)

在我的 authenticate.cfm 文件中,这是设置会话变量的地方。

<cfif cgiReferer eq shibboleth_url>
    <cfscript>
        session.mysiteShibboleth = StructNew();
        session.mysiteShibboleth.username=REReplace(http_header.headers.eppn, "@mysite.com","","ALL");
        session.mysiteShibboleth.mail=http_header.headers.eppn;
        session.mysiteShibboleth.groups=ArrayToList(REMatch('WEB\.[A-Z.-]+', http_header.headers.member));
        session.mysiteShibboleth.isAuthenticated="true";
    </cfscript>
</cfif>
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下方法,但仍然出错。我已经阅读了这个线程,它似乎没有解决我的问题。

<cfif IsDefined("session.mysitecShibboleth.isAuthenticated")>
Run Code Online (Sandbox Code Playgroud)

coldfusion session-variables coldfusion-10

1
推荐指数
1
解决办法
3096
查看次数

尝试在 Python (flask) 中过滤列表并分配给会话变量... TypeError

TypeError: Object of type 'filter' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

这真的让我很困惑。(我的 'realfiles' 函数只是确保目录列表不包含任何 Thumbs.db 或 .DS_Store 文件,即使我将其减少到“返回 True”,我也会得到同样的错误。)

我不是要序列化过滤器,无论这意味着什么。我正在序列化该过滤器的输出列表。对?Python 不是我最好的语言,所以我最初认为我的错误是试图将过滤器的输出分配给同一行中的会话变量 - 在 Javascript 中可以正常工作的东西 -

session['dir_listed_projects'] = filter( realfiles , pList )
session['dir_listed_templates'] = filter( realfiles , tList )
Run Code Online (Sandbox Code Playgroud)

所以我重写了它以分配给一个中间变量:

@app.route('/projects', methods=['GET', 'POST'])
def projects():
    listA = listdir( outta( here, 2 ) + '/Projects')
    listB = listdir( outta( here, 2 ) + '/_Templates')
    pList = filter( realfiles , listA )
    tList = filter( realfiles , listB )
    session['dir_listed_projects'] = pList
    session['dir_listed_templates'] …
Run Code Online (Sandbox Code Playgroud)

python session-variables filter flask

1
推荐指数
1
解决办法
2690
查看次数

Asp.Net Core Razor 页面,无法从其他视图/剃刀模型访问会话变量

我正在登录页面中保存会话变量,

Guid sessionId = Guid.NewGuid();

HttpContext.Session.SetString("sessionId",sessionId.ToString());
Response.Cookies.Append("sessionId", sessionId.ToString());
Run Code Online (Sandbox Code Playgroud)

现在我像这样访问这个变量:

string sessionId = Request.Cookies["sessionId"];            

if (!String.IsNullOrEmpty(sessionId) && sessionId.Equals(HttpContext.Session.GetString("sessionId")))
{
    return RedirectToPage("/LoggedIn/Index");
}

return Page();
Run Code Online (Sandbox Code Playgroud)

我在声明会话 ID 的同一剃刀页面(登录页面)上使用了此代码,但是如果我在任何其他剃刀视图页面中使用上述代码,则无法访问此会话变量。它只能在保存的同一页面上访问。

我可能做错了什么?

c# session-variables asp.net-core razor-pages asp.net-core-2.1

1
推荐指数
1
解决办法
5745
查看次数

为什么我的SESSION数组在一个页面上可以正常但在另一个页面上为空?

我有一个设置各种会话变量的类.在设置会话变量后,我执行了一个SESSION的var转储并获得它们的输出.到目前为止都很好.然后我导航到另一个页面.

session_start(); // i call this right after opening the php tag
var_dump($_SESSION); // i call this after setting the variables
Run Code Online (Sandbox Code Playgroud)

这次它是空的?

设置我的会话

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
    {
           $_SESSION['atid'] = $row['autotaskid'];
           $_SESSION['bmsid'] = $row['bmsid'];
           $_SESSION['shavlikid'] = $row['shavlikid'];
           $_SESSION['cpid'] = $row['cpid'];
    }
Run Code Online (Sandbox Code Playgroud)

试图在另一个页面上使用变量

$autotaskid = $_SESSION['atid'];
    $tsql = "SELECT COUNT(tblBackupArchive.StatusID) AS total, tblBackupArchive.StatusID ".
            "FROM tblBackupArchive INNER JOIN ".
            "tblBackup ON tblBackupArchive.BackupID = tblBackup.BackupID ".
            "GROUP BY tblBackupArchive.StatusID, tblBackup.ClientID ".
            "HAVING (tblBackup.ClientID = " . $autotaskid . ")";    
Run Code Online (Sandbox Code Playgroud)

结果是 …

php session-variables

0
推荐指数
1
解决办法
7919
查看次数

如何在PHP中正确调用$ _SESSION变量?

我试图调用$_SESSION username变量,以便它将显示在URL中

/users/USERNAME/
Run Code Online (Sandbox Code Playgroud)

我知道有办法做到这一点,但我必须做错了,因为这是我得到的错误:解析错误:语法错误,

unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or 
T_VARIABLE or T_NUM_STRING
Run Code Online (Sandbox Code Playgroud)

我得到了什么错误,我该如何解决?

这是我正在使用的代码:

move_uploaded_file( $_FILES['md']['tmp_name'], 
"users/'.$_SESSION['username'].".$_FILES['md']['name'] );
Run Code Online (Sandbox Code Playgroud)

php session session-variables

0
推荐指数
1
解决办法
91
查看次数

将PHP会话从第1页传递到第2页

我在Page1.php的顶部有以下内容.

<?php
    session_start();
    $_SESSION['ALL_YEAR'] = $_POST['ALL_YEAR'];
?>
Run Code Online (Sandbox Code Playgroud)

我想在按下此按钮时捕获名为ALL_YEAR的选择的表单选择:

<button type="button" value="Send" id="avgSubmitXLEW_1_12_3" onClick="location.href=this.value">Configure</button>
Run Code Online (Sandbox Code Playgroud)

在Page2.php上我有这个在顶部:

<?php
    session_start();
    $home = $_REQUEST['ALL_YEAR'];
?>
Run Code Online (Sandbox Code Playgroud)

在页面正文中,我有这个:

<? echo $_session['home'];?>
Run Code Online (Sandbox Code Playgroud)

回声中没有显示该值?我究竟做错了什么?

php session session-variables

0
推荐指数
1
解决办法
150
查看次数

如何使用PHP通过电子邮件发送_SESSION Vars

我正在尝试解决网络应用程序问题,我想看到各种_SESSION变量,所以我试图通过电子邮件发送它们.

我收到了电子邮件,但它是空的,会话变量最终显示在网页顶部而不是通过mail().

我曾经尝试都print_r($_SESSION)var_dump($_SESSION)-他们都没有工作.

这是我的代码行:

mail('me@mydomain.com', 'Session Var Dump', '<pre>'.var_dump($_SESSION).'</pre>');
Run Code Online (Sandbox Code Playgroud)

php email session-variables

0
推荐指数
1
解决办法
463
查看次数