PHP - Преобразуйте все данные POST в Переменные сеанса

Я теперь нашел один способ использовать рычаги отладчика сценариев в веб-представлении (примечание, НЕ UIWebView). Я сначала должен был разделить UIWebView на подклассы и добавить метод как это:

- (void)webView:(id)webView windowScriptObjectAvailable:(id)newWindowScriptObject {
    // save these goodies
    windowScriptObject = newWindowScriptObject;
    privateWebView = webView;

    if (scriptDebuggingEnabled) {
        [webView setScriptDebugDelegate:[[YourScriptDebugDelegate alloc] init]];
    }
}

Следующий необходимо создать класс YourScriptDebugDelegate, который содержит методы как они:

// in YourScriptDebugDelegate

- (void)webView:(WebView *)webView       didParseSource:(NSString *)source
 baseLineNumber:(unsigned)lineNumber
        fromURL:(NSURL *)url
       sourceId:(int)sid
    forWebFrame:(WebFrame *)webFrame
{
    NSLog(@"NSDD: called didParseSource: sid=%d, url=%@", sid, url);
}

// some source failed to parse
- (void)webView:(WebView *)webView  failedToParseSource:(NSString *)source
 baseLineNumber:(unsigned)lineNumber
        fromURL:(NSURL *)url
      withError:(NSError *)error
    forWebFrame:(WebFrame *)webFrame
{
    NSLog(@"NSDD: called failedToParseSource: url=%@ line=%d error=%@\nsource=%@", url, lineNumber, error, source);
}

- (void)webView:(WebView *)webView   exceptionWasRaised:(WebScriptCallFrame *)frame
       sourceId:(int)sid
           line:(int)lineno
    forWebFrame:(WebFrame *)webFrame
{
    NSLog(@"NSDD: exception: sid=%d line=%d function=%@, caller=%@, exception=%@", 
          sid, lineno, [frame functionName], [frame caller], [frame exception]);
}

существует, вероятно, большое влияние во время выполнения для этого, поскольку делегат отладки может также предоставить методы, которые назовут для ввода и выхода из стекового фрейма, и для выполнения каждой строки кода.

См. http://www.koders.com/noncode/fid7DE7ECEB052C3531743728D41A233A951C79E0AE.aspx для Objective C ++ определение WebScriptDebugDelegate.

Те другие методы:

// just entered a stack frame (i.e. called a function, or started global scope)
- (void)webView:(WebView *)webView    didEnterCallFrame:(WebScriptCallFrame *)frame
      sourceId:(int)sid
          line:(int)lineno
   forWebFrame:(WebFrame *)webFrame;

// about to execute some code
- (void)webView:(WebView *)webView willExecuteStatement:(WebScriptCallFrame *)frame
      sourceId:(int)sid
          line:(int)lineno
   forWebFrame:(WebFrame *)webFrame;

// about to leave a stack frame (i.e. return from a function)
- (void)webView:(WebView *)webView   willLeaveCallFrame:(WebScriptCallFrame *)frame
      sourceId:(int)sid
          line:(int)lineno
   forWebFrame:(WebFrame *)webFrame;

Примечание, что это все скрыто в частной платформе, не пытается поместить это в код, который Вы отправляете App Store, и быть готовыми к некоторому хакерству заставить его работать.

6
задан RC. 18 October 2009 в 06:45
поделиться

3 ответа

Я бы указал словарь допустимых имен POST.

$accepted = array('foo', 'bar', 'baz');

foreach ( $_POST as $foo=>$bar ) {
    if ( in_array( $foo, $accepted ) && !empty($bar) ) {
        $_SESSION[$foo] = $bar;
    }
}

Или что-то в этом роде. Я бы не использовал пустой , потому что он рассматривает 0 как пустой.

10
ответ дан 8 December 2019 в 13:47
поделиться

Ну, первое, что я хотел бы предложить, это вам не этого делать. Это огромная потенциальная дыра в безопасности. Допустим, вы полагаетесь на переменную сеанса с именем пользователя и / или типом пользователя (очень часто). Кто-то может просто опубликовать эти детали. Вам следует придерживаться подхода белого списка, копируя только утвержденные значения из $ _ POST в $ _ SESSION то есть:

$vars = array('name', 'age', 'location');
foreach ($vars as $v) {
  if (isset($_POST[$v]) {
    $_SESSION[$v] = $_POST[$v];
  }
}

То, как вы определяете «пустой», определяет, какой тип проверки вы выполняете. В приведенном выше коде используется isset () . Вы также можете выполнить if ($ _POST [$ v]) ... если вы не хотите писать пустые строки или число 0.

1
ответ дан 8 December 2019 в 13:47
поделиться

Вот,

if(isset($_POST) {
 foreach ($_POST as $key => $val) {
  if($val != "Submit")
   $_SESSION["$key"] = $val;
 }
}
2
ответ дан 8 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: