Session unrecognized in before_filter block

As the title suggests, Rails doesn't seem to recognize that a session
is a special hash extended off of ActionController::Base. The error
tells me either session is unrecognized or session is an array that
doesn't accept symbols as a parameter.

I use before_filter and session as following:
I have several user controllers extending off of each other, like
this: AdminController < ModeraterController, ModeraterController <
MemberController, MemberController < ApplicationController.

In each controller, I either have a before_filter block saying
something like:
before_filter do |controller|
  unless session[:member_id]
    redirect_to :controller=>'login'
  end
  if controller.action_name=='edit_profile'
    unless params[:id]==session[:member_id]
      flash[:notice]="You can't edit someone else's profile"
      #some redirect command
    end
  end
end

I also tried the class method (with the self.filter(controller)
method), but with no avail, so I was wondering:
1) are you allowed to have more than one method of before_filter in
one controller? For example, is this valid?:
TempController < ApplicationController
before_filter :filter1, :only=>'method1'
before_filter :filter2, :except=>'method1'
#bunch of methods
end

2) why isn't session recognized in the before_filter block method?
3) I'm guessing the reason why the class method isn't working is
because I didn't extend it off of ApplicationController (though it is
classes floating in a Controller). If this is so, can I do something
like?:
TempController < ApplicationController
before_filter :self
#bunch of methods
  self.filter(controller)
  #whatever
  end
end

Thanks for the help!

I also tried the class method (with the self.filter(controller)
method), but with no avail, so I was wondering:
1) are you allowed to have more than one method of before_filter in
one controller? For example, is this valid?:
TempController < ApplicationController
before_filter :filter1, :only=>'method1'
before_filter :filter2, :except=>'method1'
#bunch of methods
end

Yup.

2) why isn't session recognized in the before_filter block method?

It's using the controller's class as the local binding since a
controller instance isn't available at the time of the block's
creation. That's why the controller instance is passed. Therefore,
all controller methods need to be called from the controller instance,
not self.

3) I'm guessing the reason why the class method isn't working is
because I didn't extend it off of ApplicationController (though it is
classes floating in a Controller). If this is so, can I do something
like?:
TempController < ApplicationController
before_filter :self
#bunch of methods
  self.filter(controller)
  #whatever
  end
end

Yes, but you don't need to pass the controller. I find this makes the
filter more self-describing.

before_filter :check_member_access

protected
  def check_member_access
    ...
  end

The nice thing is you also have access to the private/protected
methods of the controller.

Huh, I should have tested this out earlier: it would have saved me a
lot of time:).
Thanks for your help!