# Conditional page caching

**URL:** <https://www.ruby-forum.com/t/conditional-page-caching/112057>\
**Category:** Rails\
**Created:** [August 14, 2007, 7:35pm UTC](https://www.ruby-forum.com/t/conditional-page-caching/112057 "2007-08-14T19:35:45Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![teesea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/7feea3/32.png) [@teesea](https://www.ruby-forum.com/u/teesea)\
**Post date:** [August 14, 2007, 7:35pm UTC](https://www.ruby-forum.com/t/conditional-page-caching/112057/1 "2007-08-14T19:35:45Z")

</div>

I want to be able to cache a page only when a user is not logged in,

I’ve implemented this technique

[http://www.ethelred.org/articles/2006/10/22/conditional-use-of-page-cache-in-rails](http://www.ethelred.org/articles/2006/10/22/conditional-use-of-page-cache-in-rails)

to only send a request to rails when a user is logged in and display a  
cached page when the user is not logged in. The problem is that when a  
logged in user views a page that is to be cached rails then caches the  
page with the content that is displayed to a logged in user, this will  
then be displayed when a user who is not logged in views the page. So  
what I would like to be able to do is to only page cache a page when a  
user is not logged in.

Does anyone have any ideas about how I could do this?

Cheers

Teesea

---

<div class="post-metadata">

**Author:** ![teesea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/7feea3/32.png) [@teesea](https://www.ruby-forum.com/u/teesea)\
**Post date:** [August 15, 2007, 10:06pm UTC](https://www.ruby-forum.com/t/conditional-page-caching/112057/2 "2007-08-15T22:06:35Z")

</div>

hi teesea,

i just wanted to know whether you are getting this problem only when  
cache pages.  
I mean if you remove your cache logic will everything works fine?.

i guess may be you will be doing a authorization check before serving  
any pages to a user(if not is it ok??)  
and when will this cached pages expire.?

---

<div class="post-metadata">

**Author:** ![teesea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/7feea3/32.png) [@teesea](https://www.ruby-forum.com/u/teesea)\
**Post date:** [August 15, 2007, 11:19pm UTC](https://www.ruby-forum.com/t/conditional-page-caching/112057/3 "2007-08-15T23:19:54Z")

</div>

On 8/14/07, teesea [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> page with the content that is displayed to a logged in user, this will  
> then be displayed when a user who is not logged in views the page. So  
> what I would like to be able to do is to only page cache a page when a  
> user is not logged in.
> 
> Does anyone have any ideas about how I could do this?

You should use action caching for this. It lets you run any  
authorization before filters before checking for the cache. It’s not  
as fast as page caching, but authenticated pages need to hit rails to  
run the authorization code.

There are other solutions like using nginx SSI includes:  
[http://theexciter.com/articles/dynamic-page-caching-with-nginx-ssi](http://theexciter.com/articles/dynamic-page-caching-with-nginx-ssi)

–  
Rick O.  
[http://lighthouseapp.com](http://lighthouseapp.com)  
[http://weblog.techno-weenie.net](http://weblog.techno-weenie.net)  
[http://mephistoblog.com](http://mephistoblog.com)

---

<div class="post-metadata">

**Author:** ![teesea](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/7feea3/32.png) [@teesea](https://www.ruby-forum.com/u/teesea)\
**Post date:** [August 18, 2007, 11:01am UTC](https://www.ruby-forum.com/t/conditional-page-caching/112057/4 "2007-08-18T11:01:34Z")

</div>

Thanks for the responses

I’ll have a look at action caching and see how that works out
